Android 安卓全球偏好

Android 安卓全球偏好,android,Android,我正在使用一个android应用程序,并正在寻找一种方法来建立一些全局首选项,这些首选项稍后将可供我应用程序中的所有活动/课程访问。这与我所知道的类似,有些人最终在目标c编程中使用AppDelegate。我在网上看到的答案表明,我要么扩展应用程序,要么将数据保存到SharedReference。我想知道是否有办法将这两种方法结合起来,以便在我的应用程序中,我可以继续调用Preferences对象的属性(例如Preferences.getName()),并将数据持久化到SharedReferenc

我正在使用一个android应用程序,并正在寻找一种方法来建立一些全局首选项,这些首选项稍后将可供我应用程序中的所有活动/课程访问。这与我所知道的类似,有些人最终在目标c编程中使用AppDelegate。我在网上看到的答案表明,我要么扩展应用程序,要么将数据保存到SharedReference。我想知道是否有办法将这两种方法结合起来,以便在我的应用程序中,我可以继续调用Preferences对象的属性(例如Preferences.getName()),并将数据持久化到SharedReferences,以便在Android决定重新启动我的应用程序时,我可以释放Preferences对象中的所有数据,我仍然可以从SharedReferences获取它,并重新填充Preferences对象。有人能告诉我如何做到这一点,以及这是否可行吗?

请参阅我的答案

简而言之,我创建了一个“singleton”类来保存我的首选项,只要应用程序留在内存中,数据就会一直存在。如果应用程序被系统终止,singleton类将在稍后以静默方式重新加载它


通过扩展应用程序类也可以做到这一点,但传统观点认为,这样做没有真正的好处。

只需简单回答几个有关您的方法的问题。volatile和synchronized关键字的用途是什么?此外,我是否也可以将写入合并到此pref对象中的SharedReferences?因此,每当我实例化这个对象时,我都会填充它的字段,保存到SharedReferences。我可以通过方法重载来实现这一点吗?有一个不带上下文的实例获取方法意味着我将保存到文件。另一个带有上下文参数的方法意味着我将从SharedReferences实例化?不知道我是否讲得通:)搜索“Singleton模式”,你的问题会得到详细回答,但简单的回答是,通过使用它们,你可以让多个线程随时访问同一个对象,而不会有损坏或意外创建多个实例的危险。至于写入SharedReference,这正是我在应用程序中所做的,我从中获取了源代码(我在帖子中简化了它)。或者你建议将SharedReference子类化?我从未想过,但它可能会起作用。在你的应用程序中,你在哪里向SharedRef写信?我不太确定我是否能够做到这一点,但我说的是有两个getPrefs()方法,一个以上下文为参数,另一个将在我的应用程序中用于第一次构造singleton并使用它将我的对象转储到SharedReference中。我正在考虑将读写SharedReferences合并到一个singleton对象中,这样当我第一次实例化它时,它将写入SharedReferences,当应用程序重新加载singleton时,从SharedReferences重新填充。当然,您可以编写两个GetPref()方法——一个接受上下文并从共享首选项读取,另一个不接受参数,只使用默认值初始化所有字段。然后,Prefs对象可以用来保存您想要的任何持久性数据,并且可以选择稍后写回SharedReferences。现在,我把它作为练习留给读者。