Android SharedReferences应用程序上下文与活动上下文
我正在使用几个SharedReference在我的应用程序中存储数据。 许多活动中都使用了一些首选项 我知道SharedReferences内部有一个用于快速读取访问的映射,并在设置更改时写入SD卡 我想知道如果很多活动都可以访问SharedReference,那么哪种方式更好:Android SharedReferences应用程序上下文与活动上下文,android,sharedpreferences,android-context,Android,Sharedpreferences,Android Context,我正在使用几个SharedReference在我的应用程序中存储数据。 许多活动中都使用了一些首选项 我知道SharedReferences内部有一个用于快速读取访问的映射,并在设置更改时写入SD卡 我想知道如果很多活动都可以访问SharedReference,那么哪种方式更好: 使用活动上下文在每个活动中实例化它 在每个活动中实例化它,但使用应用程序上下文 例如,将其放入应用程序类中,并在那里仅实例化一次,类似于单例 如果我用1。解决方案是否每个活动都有一个SharedReference对象?
希望有人知道Android内部是如何处理的。我更喜欢使用单例类作为首选项,根据应用程序上下文初始化首选项一次。创建getter和setter(get/put)方法来添加、更新和删除数据
通过这种方式,它将创建一次实例,并且更具可读性和可重用性。
SharedReferences
由Android作为单例进行内部管理。您可以使用以下方法获得任意数量的实例:
context.getSharedPreferences(name, mode);
只要使用相同的名称,就会得到相同的实例。因此不存在并发问题。值得一看的是,上下文
实例(无论是活动
还是应用程序
实例)共享相同的静态映射
因此,每当您通过Context.getSharedReferences(name,mode)
以相同的名称请求SharedReferences
的实例时,您都会得到相同的实例,因为它首先检查映射是否已经包含键(即传递的名称)的SharedReferences
实例。一旦加载了SharedReferences
实例,它将不会再次加载,而是从映射中获取
因此,无论您选择哪种方式,重要的是使用相同的名称,以便从应用程序的不同部分获得相同的pref。不过,为PREF创建一个“接入点”可能是一个优势。因此,它可以是在
Application.onCreate()
中实例化的prefs上的单例包装器。我建议选择三,您可以从所有活动访问,只需执行一次读取。当应用程序从HTTP请求返回时,这也很好。在这种情况下,上下文(活动)可能不存在,因此context.getSharedReferences将导致NPE。当使用单例时,这不会发生。