如果 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 实例消失了,系统记得它存在。如果 用户尝试导航回活动,系统创建 该活动的新实例使用一组保存的数据 描述活动被销毁时的状态。

关于您的第二个问题 - 这是操作系统如何执行它的实现细节,它实际上不应该让我们担心:)。重要的是它应该可靠地做到这一点。

只要用户不按Backfinish(),系统就会保持保存状态,而你的Activity没有被调用。

【讨论】:

【参考方案2】:

操作系统存储它。它调用 onSaveInstanceState 让您生成一个它存储的 Bundle,并将调用 onRestoreInstanceState 让您从状态中恢复自己。操作系统如何存储它并不重要——也许它将它保存在 RAM 中,也许它将它序列化到磁盘。可以保证的是,如果您返回该活动,您将收到一个包含您之前填写的信息的 Bundle 对象。您不需要检索状态 - 如果它存在,它将被传递给您。

【讨论】:

以上是关于如果 Activity 被操作系统杀死,我们如何检索保存的状态?的主要内容,如果未能解决你的问题,请参考以下文章

怎么避免app中activity不被系统杀死?

怎么避免app中activity不被系统杀死?

到底是 Activity 被回收了还是进程被杀死了?

ApplicationContext或Activity Context是否适合Adapter?

Activity详解(二)——异常情况下的生命周期分析

android activity状态的保存