当我在某些设备上安装我的应用程序时(似乎是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()
这是我的onBackPressed()方法:
public void onBackPressed() {
Intent intentStartRoot = new Intent().setComponent(new ComponentName(this, ActivityHome.class));
intentStartRoot.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intentStartRoot);
}
答案 0 :(得分:6)
这可能是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,这是我不想要的。
我希望这有助于某人。
另外,我在Google网站上发现了一个似乎相关的错误条目: https://code.google.com/p/android/issues/detail?id=91534