为什么SharedPreferences使用上下文?

时间:2015-04-30 07:27:58

标签: android android-intent sharedpreferences android-context

我尝试使用SharedPreferences,但我不明白为什么我们需要上下文。

如果我使用主要活动的上下文创建SharedPreferences,我可以使用其他上下文获取内容吗?

例如使用intentService类

由于

4 个答案:

答案 0 :(得分:4)

IntentServiceContext的子类(就像ActivityApplication和许多其他Android类一样。当然,您可以从SharedPreferences创建IntentService。它会看到与您的应用中的任何SharedPreferences或其他Activity相同的Context值。 (这就是为什么它被称为共享。)您只需要确保在一个上下文中在首选项的编辑器中进行了apply()commit()更改,以便在其他地方。这些都包含在the docs中。

答案 1 :(得分:2)

读取SharedPreferences并将其保存到磁盘。

因此,课程需要知道应用程序的位置 - 并且知道这一点的唯一方法是通过上下文。

在标准Java中有全局(静态)对象,因此您可以使用例如System.getProperty(“user.home”)来访问用户的主目录。该系统并未在Android中维护 - 在Android中,您需要使用Context来访问应用程序的主目录

答案 2 :(得分:1)

查看Android Source Code。您将了解Context类在内部维护共享首选项的静态HashMap以便快速访问:

private static final HashMap<String, SharedPreferencesImpl> sSharedPrefs =
        new HashMap<String, SharedPreferencesImpl>();

因此,您可以从Intent ServiceActivity等任何扩展Context的类中获取SharedPreferences,并且如果给出相同的名称,它将始终返回相同的对象。

注意:如果您追踪链,IntentService会扩展上下文:

IntentService extends Service
Service extends ContextWrapper
ContextWrapper extends Context

答案 3 :(得分:1)

是的,这是一个无意义的问题,但无论如何。 如您所知,SharedPreference.It用于存储私有原始数据。

这里,关于私人数据术语。这意味着此数据将存储到应用程序的存储路径中。这是data/data/yourpackageName/shared_prefs

因此,要访问您应用的存储空间,SharePreference需要您正在运行的Activity的有效上下文。