Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.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
Android 标记\u活动\u将\u重新排序到\u顶部导致运行时异常或旋转时出现黑屏_Android_Android Intent_Android Activity - Fatal编程技术网

Android 标记\u活动\u将\u重新排序到\u顶部导致运行时异常或旋转时出现黑屏

Android 标记\u活动\u将\u重新排序到\u顶部导致运行时异常或旋转时出现黑屏,android,android-intent,android-activity,Android,Android Intent,Android Activity,我有两个活动,我想在它们之间切换,而不需要重新创建或复制它们。每个活动都有一个按钮,该按钮将用户发送到另一个使用带有标志“活动”的“重新排序”的意图的用户 除以下情况外,此操作非常有效: 强制关闭后重新启动应用程序 点击按钮进入活动2 点击按钮返回活动1 旋转屏幕 此时,应用程序崩溃,出现“停止未恢复的活动”。棒棒糖只是显示一个黑屏 奇怪的是,如果你在第4步之前进入主屏幕,恢复应用程序,然后旋转,上述条件没有任何问题,应用程序工作正常,直到关闭/重新启动 这种情况似乎是特定于将_活动_重新排序_

我有两个活动,我想在它们之间切换,而不需要重新创建或复制它们。每个活动都有一个按钮,该按钮将用户发送到另一个使用带有标志“活动”的“重新排序”的意图的用户

除以下情况外,此操作非常有效:

  • 强制关闭后重新启动应用程序
  • 点击按钮进入活动2
  • 点击按钮返回活动1
  • 旋转屏幕
  • 此时,应用程序崩溃,出现“停止未恢复的活动”。棒棒糖只是显示一个黑屏

    奇怪的是,如果你在第4步之前进入主屏幕,恢复应用程序,然后旋转,上述条件没有任何问题,应用程序工作正常,直到关闭/重新启动

    这种情况似乎是特定于将_活动_重新排序_标记为_TOP,并发生在Android 5.0和4.4上,并且只有在新的开始时才会发生

    我没有清单中活动的属性。布局只有一个按钮,用于调用如下所示的方法:

    MainActivity:
    public void goSecond(View v) {
            Intent i = new Intent(this, SecondActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivity(i);
    }
    
    SecondActivity:
        public void goFirst(View v) {
            Intent i = new Intent(this, MainActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivity(i);
        }
    
    我没有覆盖任何其他生命周期方法或做任何其他事情


    有什么想法吗?

    有趣的例子,如果您调试生命周期方法,您可以看到,当您旋转屏幕时,
    onStop
    正在被调用,之前没有
    onPause
    。然后坠机记录下来

    java.lang.RuntimeException: Performing pause of activity that is not resumed: MainActivity
    

    java.lang.RuntimeException: Performing stop of activity that is not resumed: MainActivity
    
    我想这是框架中的一个bug。有趣的是,这似乎只发生在标志
    标志\u活动\u重新排序\u到\u前端

    在撰写本文时,我刚刚发现了这篇文章,这篇文章清楚地表明,这个标志似乎存在一个重大缺陷:(注意上面提到的Android Bug标签)


    解决方法: 如果您依赖于
    标志\u活动\u重新排序\u TO \u FRONT
    提供给您的行为,并且您想要模仿它(某种程度上),您可以使用

    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    
    相反(然而,它的工作方式略有不同——它清除被调用活动顶部的堆栈,而不是对其重新排序,所以您至少要重新创建一个活动)

    另一个选项是在清单中的活动定义中使用
    launchMode
    属性
    launchMode=“singleInstance”
    可能是您所追求的(但是这会扰乱您的任务堆栈,因此请小心处理)

    毕竟,如果您的设计允许,请考虑片段以避免这些问题。