Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
点击返回后com.android.launcher中的ANR_Android - Fatal编程技术网

点击返回后com.android.launcher中的ANR

点击返回后com.android.launcher中的ANR,android,Android,当我在某些设备上安装我的应用程序(似乎是4.4.4及更高版本)时,我有时会在com.android.launcher中看到以下ANR,步骤如下: 从活动A启动活动B 在活动B中,按系统返回键,然后在活动B的onBackPressed()方法中重新启动活动A(代码如下) System back键保持按下状态5秒钟,屏幕变黑,我的应用程序关闭,启动程序启动。调查日志显示启动器进程中存在ANR com.android.launcher中的ANR (com.android.launcher/com.an

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

  • 从活动A启动活动B
  • 在活动B中,按系统返回键,然后在活动B的onBackPressed()方法中重新启动活动A(代码如下)
  • System back键保持按下状态5秒钟,屏幕变黑,我的应用程序关闭,启动程序启动。调查日志显示启动器进程中存在ANR
  • com.android.launcher中的ANR (com.android.launcher/com.android.launcher.2.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()方法:


    这可能是Android框架中的一个bug。我今天在大约12台设备上进行了测试,发现这个错误在运行以下Android版本的Nexus类型设备上可靠地发生:

    • 4.4.4
    • 5.0.1
    • 5.0.2
    有趣的是,运行相同版本Android的三星设备并没有出现问题。Android 5.1和更高版本似乎更好,因为我在com.Android.launcher中看不到更多的ANR;然而,我现在在com.google.android.googlequicksearchbox中看到了ANRs

    在注意到我的活动在未调用super.onBackPressed()的情况下重写了onBackPressed()之后,我解决了这个问题。 在我添加super.onBackPressed()之后,ANR消失了。但这并不是一个完整的解决方法,因为调用super.onBackPressed()完成了我的活动,我不想这样做

    我希望这对某人有帮助

    见:

    见:

    此外,我在谷歌的网站上发现了一个似乎相关的bug条目:

    发布onbackpress代码我添加了onbackpress()代码。好的建议。这不是真的,如果您重写onbackpressed而不执行任何操作,则不会执行任何操作,因此不会执行anr,这通常是真的,但在我的情况下不是这样,因为我的onbackpressed()方法正在启动活动A。我已编辑了原始问题以包含此信息。谢谢你的建议,我包括源代码。类似的经验。我有两个活动可以使用FLAG\u ACTIVITY\u REORDER\u TO\u FRONT来回切换。最奇怪的是:只有当我从A->B->A切换时,错误才会发生。。它不会发生在A->B、A->B->A->B、甚至A->B->A->B->A或任何其他组合上。。我不妨把这个问题放在我的软件自述文件的已知问题部分。没错,大多数情况下都发生在nexusian 4.x到5.x(模拟器)上。。尝试了6.x模拟器,一切正常。在我自己的非nexus手机上试用过,效果也不错。
    public void onBackPressed() {
        Intent intentStartRoot = new Intent().setComponent(new ComponentName(this, ActivityHome.class));
        intentStartRoot.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        startActivity(intentStartRoot);
    }