我尝试使用SharedPreferences,但我不明白为什么我们需要上下文。
如果我使用主要活动的上下文创建SharedPreferences,我可以使用其他上下文获取内容吗?
例如使用intentService类
由于
答案 0 :(得分:4)
IntentService
是Context
的子类(就像Activity
,Application
和许多其他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 Service
或Activity
等任何扩展Context
的类中获取SharedPreferences,并且如果给出相同的名称,它将始终返回相同的对象。
注意:如果您追踪链,IntentService
会扩展上下文:
IntentService extends Service
Service extends ContextWrapper
ContextWrapper extends Context
答案 3 :(得分:1)
是的,这是一个无意义的问题,但无论如何。 如您所知,SharedPreference.It用于存储私有原始数据。
这里,关于私人数据术语。这意味着此数据将存储到应用程序的存储路径中。这是data/data/yourpackageName/shared_prefs
。
因此,要访问您应用的存储空间,SharePreference
需要您正在运行的Activity
的有效上下文。