我知道在Android中,如果东西闲置了一段时间,操作系统会吞噬东西以释放内存。
因此,如果我有第一个Activity,并且我使用Intent调用第二个Activity,然后使用另一个Intent调用第三个Activity,我可以使用后退按钮返回到之前的Activity。
但是让我说我留在第三个活动,并让手机闲置一段时间,直到操作系统决定吞噬我的应用程序的内存。如果我再次打开应用程序,我是否会丢失我从意图中形成的堆栈?我是否仍然处于第三个活动中,能够按返回并转到活动2,然后转到活动1?
答案 0 :(得分:0)
操作系统将处理特定活动在内存中保持“活动”的时间。但是,无论活动是否“活动”,“堆栈”都不应更改。这是Bundle派上用场的方法和方法:“onSaveInstanceState()”和“onRestoreInstanceState()”。
正确实施这些方法是在空状态下屏幕上重新出现的活动与之前保持的状态之间的差异。
上的一些文档答案 1 :(得分:0)
背包对于手头的任务保持不变。它将始终保持在任务中,每当用户按下后退按钮时,它将像弹出最后一项一样通过后栈。但是,并非堆栈中的所有活动都在前台。通常,只有放入后堆栈(堆栈顶部)的最后一项是在前台,如果有多个应用程序/任务打开,这甚至可能都不是真的。这是一个很好的图表来展示这一点。
现在,假设用户在其后台堆栈中打开一个包含几个活动的任务。顶级活动位于前台并且正常运行,但为了保留内存,其他活动也被销毁。因此,现在当用户按下后退按钮时,任务知道后端堆栈中的活动是什么,并且知道它现在已被销毁。因此,它将在活动生命周期之后重新创建它,并且其中的任何数据都将丢失。保留它的一种方法(原始答案提到)是使用onSaveInstanceState()
和onRestoreInstanceState()
,它可以保存Android为用户保留的捆绑内容,从而可以保存数据。所有这些信息都可以在docs中找到。为了更清楚地回答你的问题,是的,你将参加你认为自己会参加的活动,但是你可以将它作为该活动的新实例,并从以前恢复数据以同样的方式显示它,你应该使用bundle并实现上述方法。