【发布时间】:2016-11-20 12:03:42
【问题描述】:
我研究了许多关于 Activity 回栈的帖子以及 Android 开发者网站,但仍然找不到解决我遇到的问题的方法。
场景:
我有Activity A,我从A导航到Actvity B,然后按返回按钮再次转到Activity A:
Actvity A --> Activity B --> Actvity A
没什么特别的。
问题
当我按下后退按钮从Activity B 转到-> Activity A 时,Activity B 不会立即被破坏,正如预期的那样,它会进入暂停状态,这就是我遇到奇怪问题的地方。如果我想从 Activity A 返回到 Activity B 并且 IF Activity B 仍处于暂停状态,则在使用 startActivity(B) from Activity A 时会调用其所有生命周期方法:
Activity B - onCreate() > onPause > onStop > onDestroy
在这一点上,对我来说它不应该再存在了,我无法解释为什么它经历了所有的生命周期方法,而不仅仅是开始初始化生命周期方法。这种奇怪行为的后果是 Activity 在屏幕上仍然可见,但没有填充 RecyclerView,它在第一次初始化时按预期进行。此时如果我按回Activity B再次进入暂停状态。
如果Activity B 处于暂停状态(Activity A 位于堆栈顶部)并且框架通过生命周期回调结束Activity B,我再次从 A 导航到 Activity B,它按预期工作(RecyclerView 已填充),基本上一个新的实例总是可以正常工作。
当参考活动生命周期图时,我只能假设Activity B 进入暂停状态,但是在没有调用onStop、onDestroy 等的情况下被销毁。这意味着我有任何活动清理操作那些回调没有发生?
我尝试过的事情
在启动Activity B 时更改各种Intent 过滤器和组合:
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP
在Activity B 中调用onBackPressed() 时调用finish()
各种其他手指交叉,希望改变,似乎没有任何工作。
谁能帮忙!
【问题讨论】:
-
从 Activity A 中的
onBackPressed()中删除super.onBackPressed()以下是onBackPressed()@Override public void onBackPressed() { moveTaskToBack(true); }的代码 -
@jatDevta 我不确定这将如何改变任何事情,活动 A 不是问题。其次,我在 Activity A 中有一个导航绘制,将这个
moveTaskToBack(true);添加到onBackPressed()方法只会关闭应用程序,而不是关闭导航抽屉,如果它打开并且我按下返回?
标签: android android-activity android-lifecycle