回击后,com.android.launcher中的ANR

时间:2015-07-14 22:45:27

标签: android

当我在某些设备上安装我的应用程序时(似乎是4.4.4及更高版本)我有时会在以下步骤之后在com.android.launcher中看到以下ANR:

  1. 从活动A,启动活动B
  2. 在活动B中,按系统返回键并在活动B的onBackPressed()方法中重新启动活动A(代码如下)。
  3. 系统返回键保持按下状态5秒钟,屏幕变黑,我的应用程序关闭,启动器启动。调查日志会在Launcher进程中显示ANR。
  4.   

    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);
    }
    

1 个答案:

答案 0 :(得分:6)

这可能是Android Framework中的一个错误。我今天在大约12台设备上进行了测试,并注意到在运行这些Android版本的Nexus型设备上可以正常发生此错误:

  • 4.4.4
  • 5.0.1
  • 5.0.2

有趣的是,运行相同版本Android的三星设备没有出现此问题。 Android 5.1及更高版本似乎更好,因为我在com.android.launcher中看不到更多的ANR;但我现在在com.google.android.googlequicksearchbox中看到ANR。

我注意到我的Activity在没有调用super.onBackPressed()的情况下覆盖了onBackPressed(),我解决了这个问题。 在我添加了super.onBackPressed()之后,ANR就消失了。但这不是一个完整的解决方法,因为调用super.onBackPressed()完成了我的Activity,这是我不想要的。

我希望这有助于某人。

请参阅:Using FLAG_ACTIVITY_REORDER_TO_FRONT to switch among persistently running UI activities leads to "no window focus" error

请参阅:Android-L issue: onBackpressed when using FLAG_ACTIVITY_REORDER_TO_FRONT to launch previous activity & freezes app for sometime

另外,我在Google网站上发现了一个似乎相关的错误条目: https://code.google.com/p/android/issues/detail?id=91534