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

How to save the state of my android app?

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

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

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

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

So far I've been reading that I shouldn't use SharedPreferences for that, because that's for preferences

最后,欢迎大家随意使用SharedPreferences。它们针对用户偏好进行了优化

nor should I use the savedInstanceState Bundle, because that's unsafe

仅适用于。例如,它用于保留部分填写的表单值供用户在用户分心时完成。它不是长期存储解决方案。

The suggested way is to save data in OnPause to a database or a file (which will suffice in my case) and to restore it in OnResume.

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

The app can only be entered via the MainActivity

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

so I guess I restore the state in its OnResume method.

每个 activity 负责自己的状态。某些状态可能会被共享(例如,单例 POJO 缓存管理器)。但是 activity 不应该假设之前已经为它设置了状态。

Does this mean that I should store the state of my app in the OnPause methods of all of the activities in my app?

同样,这在很大程度上取决于您在应用程序中所做的事情。答案可能是 "store the state when the user presses the button" 或 "store the state when the user swipes" 或 "store the state as we get it from the incoming MQTT message from the server" 或其他。

I want to store the state only when the user leaves my app and restore it ones he returns

恕我直言,一般来说,您想在状态更改时存储状态。 "Restore",如果有适当的缓存,在应用程序处于活跃使用状态时速度非常快,并且只有在您有大量大数据(并且您的缓存开始弹出值)或您的进程被终止和启动时才会是一个缓慢的操作再次.