如何保存我的 android 应用程序的状态?

Posted

技术标签:

【中文标题】如何保存我的 android 应用程序的状态?【英文标题】:How to save the state of my android app? 【发布时间】:2016-04-09 14:28:51 【问题描述】:

我想保存我的应用程序的状态并在用户返回我的应用程序时恢复它。到目前为止,我一直在阅读我不应该为此使用 SharedPreferences,因为那是为了偏好;我也不应该使用 savedInstanceState Bundle,因为那是不安全的。

建议的方法是将 OnPause 中的数据保存到数据库或文件(在我的情况下就足够了)并在 OnResume 中恢复。然而,关于这种方法出现了两个问题:

    该应用程序只能通过 MainActivity 进入,所以我想我在其 OnResume 方法中恢复了状态。但是,用户可以将我的应用程序留在任何地方。这是否意味着我应该将应用的状态存储在应用中所有活动的 OnPause 方法中?

    如果我正确理解了活动的生命周期,当用户浏览我的应用程序中的活动时,也会调用 OnPause 和 OnResume。导航时无需存储和恢复;我只想在用户离开我的应用程序并恢复他返回的应用程序时存储状态。还是我应该忽略这一点并进行大量存储和恢复?

【问题讨论】:

我认为你应该忽略它并使用 SharedPreferences 来做。它简单且使过程快速。 为什么不能使用共享首选项?它适用于这类事情。 【参考方案1】:

到目前为止,我一直在阅读我不应该为此使用 SharedPreferences,因为那是为了偏好

最后,欢迎您使用SharedPreferences 来做任何您想要的事情。它们针对用户偏好优化

我也不应该使用 savedInstanceState Bundle,因为那不安全

仅适用于select scenarios。例如,如果用户分心,它可以为用户保留部分填写的表单值以完成。这不是一个长期的存储解决方案。

建议的方法是将 OnPause 中的数据保存到数据库或文件(在我的情况下就足够了)并在 OnResume 中恢复。

根据数据的性质和用户交互,保存数据的方案和解决方案有很多。您在聊天应用程序中使用用户键入的聊天消息以及您从聊天服务器获得的内容将与您在文字处理器中所做的非常不同,这将与您在游戏中所做的非常不同,后者将与您在流媒体播放器等中所做的非常不同。

应用只能通过MainActivity进入

这是不正确的,除非您采取非常具体的步骤来强制执行此操作。如果用户在您的应用程序中,然后移动到另一个应用程序(例如,按 HOME),您的应用程序的进程可能会在您的应用程序处于后台时终止。但是,如果用户很快返回您的应用程序(例如,在半小时内),例如通过概览屏幕/最近的任务列表,android 将尝试将用户返回到他们上次的状态。 . 这可能是您的任何活动。

所以我想我在它的 OnResume 方法中恢复了状态。

每个活动都负责自己的状态。其中一些状态很可能是共享的(例如,单例 POJO 缓存管理器)。但是一个 Activity 不应该假定之前已经为它设置了状态。

这是否意味着我应该将应用的状态存储在应用中所有活动的 OnPause 方法中?

同样,这在很大程度上取决于您在应用中执行的操作。答案可能是“存储用户按下按钮时的状态”或“存储用户滑动时的状态”或“存储从服务器传入的 MQTT 消息中获取的状态”等等。

我只想在用户离开我的应用时存储状态并恢复他返回的状态

恕我直言,一般来说,您希望在状态更改时存储状态。在适当的缓存下,“恢复”在应用程序处于活动使用状态时非常快,并且只有在您有大量大数据(并且您的缓存开始弹出值)或您的进程被终止并重新启动时才会是一个缓慢的操作。

【讨论】:

以上是关于如何保存我的 android 应用程序的状态?的主要内容,如果未能解决你的问题,请参考以下文章

用户退出应用程序时如何保存 Android CheckBox 的状态?

应用关闭时Android WebView保存显示状态

退出时如何保存 Activity 的状态?安卓

如何转换 ViewModel 以利用状态保存?

用户杀死Android应用后保存状态

Android 片段不保存状态,在旋转/屏幕锁定/返回时崩溃