我已经研究了许多关于Activity堆栈的帖子,以及Android开发者网站,但仍然找不到解决我遇到的问题的方法。
场景:
我有一个Activity A
,我从A导航到Activity B
,然后按返回按钮再次进入Activity A
:
Activity A
--> Activity B
--> Activity A
没有什么特别的。
问题
当我按返回按钮从Activity B
-->Activity A
,Activity B
并没有立即销毁,而是像预期的那样进入暂停状态,这就是我遇到奇怪问题的地方。如果我想从Activity A
返回到Activity B
,IF Activity B
仍处于暂停状态,当我使用startActivity(B)
时,所有的生命周期方法都会被调用:
Activity B
- onCreate()
> onPause
> onStop
> onDestroy
<-- 为什么会发生这种情况
此时,对我来说它不应该再存在了,我无法解释为什么它会通过所有的生命周期方法,而不仅是开始初始化的生命周期方法。这种奇怪行为的后果是Activity仍然可见于屏幕上,但不会填充RecyclerView
,而在第一次初始化时却如预期地这样做了。此时如果我按返回键,Activity B
又会进入暂停状态。
如果Activity B
处于暂停状态(Activity A
位于堆栈顶部),并且框架通过生命周期回调结束了Activity B
,并且我从A再次导航到Activity B
,则会像预期的那样工作(RecyclerView
被填充),基本上,一个新的实例总是能正常工作的。
当参考Activity生命周期图时,我所能假定的只是Activity B
进入了暂停状态,但是没有调用onStop
、onDestroy
等方法,这意味着我在这些回调中执行的任何Activity清理操作都没有发生?
我尝试过的事情
更改启动Activity B
时的各种Intent
过滤器和组合:
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP
在Activity B
中调用onBackPressed()
时,调用finish()
。
尝试了各种方法,但都没有奏效。
请问有谁能提供帮助吗?
onBackPressed()
中删除super.onBackPressed()
。以下是onBackPressed()
的代码:@Override public void onBackPressed() { moveTaskToBack(true); }
- random_usermoveTaskToBack(true);
到onBackPressed()
方法中,它只会关闭应用程序,而不是关闭导航抽屉(如果它是打开的)。 - Mark