Android 标记\u活动\u将\u重新排序到\u顶部导致运行时异常或旋转时出现黑屏
我有两个活动,我想在它们之间切换,而不需要重新创建或复制它们。每个活动都有一个按钮,该按钮将用户发送到另一个使用带有标志“活动”的“重新排序”的意图的用户 除以下情况外,此操作非常有效:Android 标记\u活动\u将\u重新排序到\u顶部导致运行时异常或旋转时出现黑屏,android,android-intent,android-activity,Android,Android Intent,Android Activity,我有两个活动,我想在它们之间切换,而不需要重新创建或复制它们。每个活动都有一个按钮,该按钮将用户发送到另一个使用带有标志“活动”的“重新排序”的意图的用户 除以下情况外,此操作非常有效: 强制关闭后重新启动应用程序 点击按钮进入活动2 点击按钮返回活动1 旋转屏幕 此时,应用程序崩溃,出现“停止未恢复的活动”。棒棒糖只是显示一个黑屏 奇怪的是,如果你在第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”
可能是您所追求的(但是这会扰乱您的任务堆栈,因此请小心处理)
毕竟,如果您的设计允许,请考虑片段以避免这些问题。