如果 Activity 被操作系统杀死,我们如何检索保存的状态?
Posted
技术标签:
【中文标题】如果 Activity 被操作系统杀死,我们如何检索保存的状态?【英文标题】:How do we retrieve saved state if the Activity is killed by OS? 【发布时间】:2019-01-19 10:58:35 【问题描述】:所以,据我了解,一旦App没有被销毁并且在后台;如果操作系统需要更多内存,则操作系统会终止应用程序但会保存状态 (onSaveInstanceState
)。当我们重新打开应用程序时,看起来我们正面临着我们之前的活动,但它实际上已经被销毁并再次创建。如果我的解释是正确的,应用程序如何检索保存的状态?它是否将其存储在内存中?我们能够检索保存的状态多长时间?
【问题讨论】:
【参考方案1】:如果我的解释是正确的,应用程序如何检索保存的 状态?
来自android documentation
如果系统由于系统限制(例如 配置更改或内存压力),然后虽然实际 Activity 实例消失了,系统记得它存在。如果 用户尝试导航回活动,系统创建 该活动的新实例使用一组保存的数据 描述活动被销毁时的状态。
关于您的第二个问题 - 这是操作系统如何执行它的实现细节,它实际上不应该让我们担心:)。重要的是它应该可靠地做到这一点。
只要用户不按Back
或finish()
,系统就会保持保存状态,而你的Activity
没有被调用。
【讨论】:
【参考方案2】:操作系统存储它。它调用 onSaveInstanceState 让您生成一个它存储的 Bundle,并将调用 onRestoreInstanceState 让您从状态中恢复自己。操作系统如何存储它并不重要——也许它将它保存在 RAM 中,也许它将它序列化到磁盘。可以保证的是,如果您返回该活动,您将收到一个包含您之前填写的信息的 Bundle 对象。您不需要检索状态 - 如果它存在,它将被传递给您。
【讨论】:
以上是关于如果 Activity 被操作系统杀死,我们如何检索保存的状态?的主要内容,如果未能解决你的问题,请参考以下文章