复现步骤
设置—语言和输入法—当前输入法—先按住选择键盘,再马上按住要选择的输入法—松手—再点击当前输入法。
原因分析
上述操作进入到如下代码时,因 view == null
,导致system
进程崩溃重启,进而导致机器表现出重启现象。
/**
* Resets the cancel next up flag.
* Returns true if the flag was previously set.
*/
private static boolean resetCancelNextUpFlag(@NonNull View view) {
if ((view.mPrivateFlags & PFLAG_CANCEL_NEXT_UP_EVENT) != 0) {
view.mPrivateFlags &= ~PFLAG_CANCEL_NEXT_UP_EVENT;
return true;
}
return false;
}
解决办法
private static boolean resetCancelNextUpFlag(@NonNull View view) {
///此处添加 ==null 的判断即可。
if ((null != view) && ((view.mPrivateFlags & PFLAG_CANCEL_NEXT_UP_EVENT) != 0)) {
view.mPrivateFlags &= ~PFLAG_CANCEL_NEXT_UP_EVENT;
return true;
}
return false;
}
......