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

时间:2016-04-09 14:28:51

标签: android save persistence

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

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

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

  2. 如果我已正确理解活动生命周期,则当用户浏览应用程序中的活动时,也会调用OnPause和OnResume。导航时不需要存储和恢复;我想仅在用户离开我的应用程序时存储状态并将其恢复为他返回的状态。或者我应该忽略它并进行大量存储和恢复?

1 个答案:

答案 0 :(得分:3)

  

到目前为止,我一直在阅读我不应该使用SharedPreferences,因为这是首选项

最后,欢迎您将SharedPreferences用于任何您想要的内容。对于用户首选项,它们已优化

  

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

仅适用于select scenarios。例如,如果用户分心一点,则用于保持用户完成的部分填写的表格值。它不是一个长期的存储解决方案。

  

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

根据数据的性质和用户交互,有许多保存数据的方案和解决方案。您在聊天应用程序中使用聊天消息进行的操作与用户输入的聊天消息以及您从聊天服务器获取的消息将与您在文字处理程序中所做的完全不同,这与您在游戏中所做的完全不同与您在流媒体播放器等中所做的完全不同。

  

只能通过MainActivity

输入应用

这是不正确的,除非您采取非常具体的步骤来强制执行此操作。如果用户在您的应用中,然后转移到其他应用(例如,按HOME),则您的应用在后台时可能会终止您应用的流程。如果用户相当快地返回您的应用程序(例如,在半小时内),例如通过概览屏幕/最近任务列表,Android将尝试将用户返回到他们最后的状态。这可能是你的任何活动。

  

所以我想我在其OnResume方法中恢复状态。

每个活动都对自己的状态负责。可以共享该状态中的一些(例如,单独的POJO高速缓存管理器)。但是一项活动不应该假设以前已经为它建立了状态。

  

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

同样,这在很大程度上取决于您在应用中所做的事情。答案可能是"当用户按下按钮时存储状态"或者"存储用户滑动时的状态"或者"存储状态,因为我们从服务器传入的MQTT消息中获取状态"或者其他什么。

  

我想仅在用户离开我的应用程序时存储状态并将其恢复为他返回的状态

恕我直言,一般情况下,你希望在状态发生变化时存储状态。如果你有大量的大数据(并且你的缓存开始弹出值),或者你的进程是终止并重新开始。