复现步骤

设置—语言和输入法—当前输入法—先按住选择键盘,再马上按住要选择的输入法—松手—再点击当前输入法。

原因分析

上述操作进入到如下代码时,因 view == null,导致system进程崩溃重启,进而导致机器表现出重启现象。

  1. /**
  2. * Resets the cancel next up flag.
  3. * Returns true if the flag was previously set.
  4. */
  5. private static boolean resetCancelNextUpFlag(@NonNull View view) {
  6. if ((view.mPrivateFlags & PFLAG_CANCEL_NEXT_UP_EVENT) != 0) {
  7. view.mPrivateFlags &= ~PFLAG_CANCEL_NEXT_UP_EVENT;
  8. return true;
  9. }
  10. return false;
  11. }

解决办法

  1. private static boolean resetCancelNextUpFlag(@NonNull View view) {
  2. ///此处添加 ==null 的判断即可。
  3. if ((null != view) && ((view.mPrivateFlags & PFLAG_CANCEL_NEXT_UP_EVENT) != 0)) {
  4. view.mPrivateFlags &= ~PFLAG_CANCEL_NEXT_UP_EVENT;
  5. return true;
  6. }
  7. return false;
  8. }
  9. ......