如何将应用程序堆栈保存到捆绑包中?

时间:2012-03-26 20:54:17

标签: android android-fragments android-lifecycle back-stack

我想保存我的应用程序的状态,以便当它从关闭状态重新打开时,最后一个片段是可见的并且后备堆栈被保留。我希望每次关闭应用程序时都保留此状态,而不仅仅是方向更改或系统杀死应用程序以释放资源(就像使用onSaveInstanceState() / onRestoreInstanceState()时的情况一样

到目前为止,我已经能够通过将状态保存到SharedPreferences并在以后恢复它来按计划恢复上一个片段及其状态。但是,这不会保留片段后备堆栈,因此当用户加载应用程序并按下后退按钮以在应用程序流中“向上”移动时,应用程序将退出而不是上升。

此时我需要的是能够访问应用程序后台堆栈并在必要时将其保存到捆绑包中,就像系统在onSaveInstanceState()中所做的那样。我已经阅读了FragmentManager.saveFragmentInstanceState()的文档,但我不确定如何使用它来实现我的目标。任何人都可以指出我正确的方向吗?

我正在使用Android兼容性库中的片段实现。

1 个答案:

答案 0 :(得分:5)

据我所知,Android系统不会让你获得任务的后台堆栈,它只能give you所有正在运行的任务的前Activity。因此,您需要实现自己的维护Activities后台堆栈的机制。 LocalActivityManager的实施可能对您有帮助,尤其是saveInstanceState()方法。因此,您可以执行类似的操作,并随时在后台堆栈中调用onSaveInstanceState(Bundle)个活动,然后保留Bundle(例如,在文件中)。如果你使用Fragments,那么你还需要保持他们的后筹码。

或许,android:alwaysRetainTaskState可能会帮助您解决问题,而不是潜入管理后台堆栈。