当我在某些设备上安装我的应用程序(似乎是4.4.4及更高版本)时,我有时会在以下步骤之后在com.android.launcher中看到以下ANR:
com.android.launcher中的ANR(com.android.launcher/com.android.launcher2.Launcher)原因:输入调度超时(等待,因为没有窗口有焦点但是有一个专注的应用程序,当它完成时可能最终添加一个窗口启动.)
请注意,ANR发生在com.android.launcher中(不在我的应用程序中).
顺便说一句,我在onBackPressed/onPause/onStop方法中没有做昂贵的操作.
日志还显示ANR发生时没有调用onBackPressed() - 非常奇怪的行为,你可以在这里看到:
## User starts Activity A from Android Launcher
D/Activity A: onResume()
D/Activity A: onClick(): start Activity B
D/Activity A: onPause()
D/Activity B: onResume()
## User taps system back key (and onBackPressed() launches Activity A)
D/Activity B: onBackPressed(): start Activity A
D/Activity B: onPause()
D/Activity A: onResume()
D/Activity A: onClick(): start Activity B
D/Activity A: onPause()
D/Activity B: onResume()
## User taps system back key (but onBackPressed() is not invoked. Instead an ANR occurs)
I/InputDispatcher( 557): ANR in com.android.launcher
D/Activity B: onPause()
Run Code Online (Sandbox Code Playgroud)
这是我的onBackPressed()方法:
public void onBackPressed() {
Intent intentStartRoot = new Intent().setComponent(new ComponentName(this, ActivityHome.class));
intentStartRoot.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intentStartRoot);
}
Run Code Online (Sandbox Code Playgroud)
这可能是Android Framework中的一个错误.我今天在大约12台设备上进行了测试,并发现在运行这些Android版本的Nexus型设备上可以正常发生此错误:
有趣的是,运行相同版本Android的三星设备没有出现问题.Android 5.1及更高版本似乎更好,因为我在com.android.launcher中看不到更多的ANR; 但我现在在com.google.android.googlequicksearchbox中看到ANR.
我注意到我的Activity在没有调用super.onBackPressed()的情况下覆盖了onBackPressed(),我解决了这个问题.在我添加了super.onBackPressed()之后,ANR就消失了.但这不是一个完整的解决方法,因为调用super.onBackPressed()完成了我的Activity,这是我不想要的.
我希望这可以帮助别人.
请参阅:使用FLAG_ACTIVITY_REORDER_TO_FRONT在持续运行的UI活动之间切换会导致"无窗口焦点"错误
请参阅:Android-L问题:onBackpressed使用FLAG_ACTIVITY_REORDER_TO_FRONT启动上一个活动并暂停冻结应用程序
此外,我在Google网站上发现了一个似乎相关的错误条目:https: //code.google.com/p/android/issues/detail?id = 91534
| 归档时间: |
|
| 查看次数: |
2505 次 |
| 最近记录: |