poi*_*poi 6 android android-intent android-activity
我有两个活动,我想在它们之间切换而不重新创建或复制它们.每个活动都有一个按钮,该按钮将使用FLAG_ACTIVITY_REORDER_TO_TOP的意图将用户发送给另一个.
除以下条件外,此方法效果很好:
此时,应用程序崩溃,"执行停止未恢复的活动".棒棒糖只是显示黑屏.
奇怪的是,如果你在第4步之前进入主屏幕并恢复应用程序,然后旋转上述条件没有任何问题,应用程序正常工作,直到它关闭/重新启动.
这种情况似乎特定于FLAG_ACTIVITY_REORDER_TO_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);
}
Run Code Online (Sandbox Code Playgroud)
我没有覆盖任何其他生命周期方法或做任何其他事情.
有任何想法吗?
有趣的情况是,如果您调试生命周期方法,您可以看到,当您旋转屏幕时,onStop正在调用该方法,而onPause之前没有。然后记录崩溃
java.lang.RuntimeException: Performing pause of activity that is not resumed: MainActivity\nRun Code Online (Sandbox Code Playgroud)\n\n其次是
\n\njava.lang.RuntimeException: Performing stop of activity that is not resumed: MainActivity\nRun Code Online (Sandbox Code Playgroud)\n\n我想它\xe2\x80\x99是框架中的一个错误。有趣的是,这似乎只发生在 flag 上FLAG_ACTIVITY_REORDER_TO_FRONT。
在撰写本文时,我刚刚发现这篇文章,它清楚地表明该标志似乎存在一个重大缺陷:Is any replacement of Intent.FLAG_ACTIVITY_REORDER_TO_FRONT(注意提到的 Android Bug Ticket)
\n\n解决方法: \n如果您依赖于给您的行为FLAG_ACTIVITY_REORDER_TO_FRONT,并且您想模仿它(某种程度上),您可以使用
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);\nRun Code Online (Sandbox Code Playgroud)\n\n相反(但是,它的工作方式略有不同 - 它清除被调用活动顶部的堆栈,而不是对其重新排序,因此您将至少重新创建 1 次活动)。
\n\n另一种选择是使用launchMode清单中活动定义中的属性。launchMode="singleInstance"可能就是您想要的(但是这会扰乱您的任务堆栈,因此请谨慎处理)
毕竟,如果您的设计允许,请考虑使用片段来完全避免这些问题。
\n| 归档时间: |
|
| 查看次数: |
478 次 |
| 最近记录: |