在Android应用中保存全局状态

时间:2014-06-09 13:56:23

标签: android lifecycle

保存对全局状态的任何更改的最佳方法是什么?如果进程因内存不足等原因而被杀死,那么这种更改会丢失?

对于我们onSaveInstanceState()的活动,它允许在需要时保存状态。

我想为全球国家做类似的事情。我们的Application类包含对许多对象的引用,这些对象可以在应用程序下次启动时在onCreate()中重新加载。但我们也改变了其中一些对象的状态,并要求通过因内存不足而被杀死的应用程序来维护这些更改。

我们当然可以在每次对内存中的对象进行更改时保持不变。但这会非常浪费。

我目前的想法是使用onActivitySaveInstanceState()并保持一个脏标志只知道它只召唤一次。但这增加了复杂性,可能不是这种方法的目的。

这不是一个特别罕见的要求,但网络上的大多数资源只关注Activity生命周期。我很高兴知道一种更好的方法。

2 个答案:

答案 0 :(得分:0)

您始终可以在Application类中存储值。从较高的层面来说,这非常简单,您可以创建一个自定义的MyCustomApplication,它扩展了Android Application类。 Applicaiton类仅存在,而App在范围内(包括它在后台时,在Android中有些不可预测)。

然后你可以使用getContext()。getApplication()

来访问它

实现细节更复杂,你真的应该将Applicaiton扩展为Singleton,如本文所述:Singletons vs. Application Context in Android?

答案 1 :(得分:0)

没有Global State的概念,我实际上认为你根本不需要它。一个应用程序由几个独立的部分组成,这些部分有自己的状态"。因此每个部分都对自己的状态负责。例如,显示特定数据的片段知道在何处获取此数据以及如果没有此类数据该怎么做。显示用户设置的活动知道在何处获取用户设置,如何更新用户设置等。这两个部分都知道在生命周期方法调用时该怎么做。