修改不了系统源码的,只能在应用程序中修改 softInputMode,亲测可完美解决!
@Override
protected void onStart() {
super.onStart();
WindowManager.LayoutParams attributes = this.getWindow().getAttributes();
attributes.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED
| WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
}
原因分析:
[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);
}