[DESCRIPTION]
1.将锁屏设为“NONE”
2.进入任意一个app
3.按power锁屏,再解屏,再锁屏,再解屏
4.app画面无法点击,无法滑动,但是按 home 可回到 launcher
5.打开开发者选项中的屏幕触点和坐标滑动是正常的,但 app 不重新绘制了
[SOLUTION]
这个问题是因为连续锁屏,再解屏,ams 因为某个case无法重新绘制导致的,出现了假的卡顿现象
解决方法:将 wm.updateViewLayout() 更新方法移出 if 键盘模式特殊情况语句块中,正常情况也更新界面
frameworks\base\core\java\android\app\ActivityThread.java
//修改前
if ((l.softInputMode
& WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION)
!= forwardBit) {
l.softInputMode = (l.softInputMode
& (~WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION))
| forwardBit;
if (r.activity.mVisibleFromClient) {
ViewManager wm = a.getWindowManager();
View decor = r.window.getDecorView();
wm.updateViewLayout(decor, l);
}
}
//修改后
if ((l.softInputMode
& WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION)
!= forwardBit) {
l.softInputMode = (l.softInputMode
& (~WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION))
| forwardBit;
}
if (r.activity.mVisibleFromClient) {
ViewManager wm = a.getWindowManager();
View decor = r.window.getDecorView();
wm.updateViewLayout(decor, l);
}
拓展阅读