进程被杀死后恢复状态

Posted

技术标签:

【中文标题】进程被杀死后恢复状态【英文标题】:Restore State after process is killed 【发布时间】:2013-01-02 19:21:25 【问题描述】:

我已经实现了 onRestoreInstanceState 和 onSaveInstanceState。当应用程序最小化时(通过按下主页按钮,或者另一个活动在前台),它们都可以成功运行。但是,当我最小化应用程序并终止进程(通过打开当前进程列表并结束该进程)时,应用程序不会恢复保存的实例状态。我怎样才能让它恢复那个保存的状态?我最好的选择是使用可序列化将 savedInstanceState 包写入文件(因此将某些内容存储在硬盘驱动器上,而不是 RAM 上),然后从文件中重新加载 savedInstanceState?

【问题讨论】:

【参考方案1】:

我怎样才能让它恢复保存的状态?

你不能。这不是保存的实例状态的用途。

我最好的选择是使用可序列化将 savedInstanceState 包写入文件(因此将某些内容存储在硬盘驱动器上,而不是 RAM 上),然后从文件中重新加载 savedInstanceState?

您的“最佳选择”是持久性,例如文件、数据库或SharedPreferences。您的具体做法似乎很奇怪。

已保存的实例状态用于临时信息,例如用户已填写但尚未提交的表单内容。除此之外的任何东西都不属于保存的实例状态,而是属于某种持久数据模型。这与构建 Web 应用程序没有什么不同,您在 DOM 和 javascript 变量中的数据不会永远存在,而是需要存储在某个地方(通常在 Web 服务器上)。

【讨论】:

谢谢,我只是想确认我必须写入文件。【参考方案2】:

答案可能为时已晚,但您可以使用 android Jetpack 中的SavedStateHandle 保存状态(并且它将在进程终止后继续存在)。

在此处查看更多信息: https://developer.android.com/topic/libraries/architecture/viewmodel-savedstate

【讨论】:

以上是关于进程被杀死后恢复状态的主要内容,如果未能解决你的问题,请参考以下文章

在应用程序被杀死后在应用程序启动时恢复未完成的多部分/表单数据上传任务

在 xamarin 表单中保存和恢复应用程序状态

中断后CPU恢复执行的进程状态

WatchOS WCSession sendMessage 唤醒杀死 iPhone 应用程序的调试和状态恢复问题

UICollectionView 状态恢复:自定义滚动位置

每次都恢复状态?