这些天,Android Activity 生命周期让我有点头疼。
我想在应用程序进入后台之前存储最后一个显示的 Activity,以便在用户恢复应用程序时恢复正确的状态。问题在于,为什么应用程序进入后台而不是全部执行相同的操作有多种可能性。
为了清楚起见,假设我有 3 个活动;A-1、A-2 和 A-3(A-2 是 A-3 的入口)。A-2 和 A-3 只是普通的活动,但 A-1 是某种调度程序。它是清单文件中的启动器 Activity,它的唯一功能是读取SharedPreference
其他两个在其onPause()
方法中设置的基本上指示最后一个 Activity 是什么,并激活该 Activity 然后调用this.finish()
. 直线前进。
场景是(在所有这些之后,用户从后台进程列表或启动器重新启动应用程序):
- 在 A-3 中,用户点击“返回”按钮并转到主屏幕。这运行
onPause()
,然后onDestroy()
为 A-3。 - 在 A-3 中,用户点击“主页”按钮并转到主屏幕。这运行
onPause()
,然后onSavedInstanceState()
为 A-3。 - 用户执行上述两项中的任何一项,然后调出后台进程列表并强制终止应用程序。不执行任何代码。
- 操作系统检测到它需要释放内存,因此首先(两者中的)它强制终止后台进程,然后如果这还不够,则强制终止当前活动的进程。
现在在每种情况下都会发生以下情况:
- A-1 启动,它读取设置的首选项
onPause()
并按应有的方式启动 A-3。按设计工作(但可能不是最好的方法)。 - A-1 启动,并执行与上述相同的操作。
- 现在事情变得棘手了。当应用程序重新启动时,没有任何迹象表明它已终止,因此 A-1 会读取首选项,然后在应该启动 A-2 时启动 A-3。这是不受欢迎的,会破坏应用程序。
- 类似于数字 3。
我的问题是,在这种情况下如何最好地管理应用程序状态?
捆绑包是否仅在应用程序运行时才实时传递onSavedInstanceState
,那么这是否是仅在“会话”期间保存此类信息的最佳方式