Hac*_*k06 4 android default sharedpreferences
这是一个标准任务:在应用程序的共享首选项中存储一些值,以便以后能够检索它.但是人们会发现有3个函数可以在那里存储一个值:
//1.
public static SharedPreferences PreferenceManager.getDefaultSharedPreferences(Context context) {}
//2.
public SharedPreferences Activity.getPreferences(int mode) {}
//3.
public SharedPreferences ContextWrapper.getSharedPreferences(String name, int mode) {}
Run Code Online (Sandbox Code Playgroud)
所以现在问题是:选择哪一个,哪一个更好,或者每个人的目的是什么?
这是我自己的问题的答案:
首先,我们来看看这3个函数的实现.
//1.
public static SharedPreferences PreferenceManager.getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context), getDefaultSharedPreferencesMode());
}
//2.
public SharedPreferences Activity.getPreferences(int mode) {
return getSharedPreferences(getLocalClassName(), mode);
}
//3.
public SharedPreferences ContextWrapper.getSharedPreferences(String name, int mode) {
return mBase.getSharedPreferences(name, mode);
}
Run Code Online (Sandbox Code Playgroud)
这里mBase是对Context类型对象的引用.
我们看到第二个函数调用第三个函数,所有这三个函数基本相同但参数不同.想想重载.
接下来,深入了解第一个函数的实现,我们可以简化其调用,如下所示:
//1.
public static SharedPreferences PreferenceManager.getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(context.getPackageName() +
"_preferences", Context.MODE_PRIVATE);
}
Run Code Online (Sandbox Code Playgroud)
同样,对于第二个功能:
//2.
public SharedPreferences Activity.getPreferences(int mode) {
return mBase.getSharedPreferences(getLocalClassName(), mode);
}
Run Code Online (Sandbox Code Playgroud)
总而言之,第1个函数创建一个名称为的共享首选项文件<your_package_name>_preferences,第二个函数创建一个名称为的共享首选项文件<your_class_name>,最后,第三个函数允许您为共享首选项文件指定任意名称.
不用说,您需要为共享首选项文件指定正确的名称,以便返回保存的值.因此,您可以使用第3个函数自己指定名称,或者使用与之前保存方式相对应的第1个或第2个函数.
警告!确保传递Context类的正确实例.例如,一个混乱的场景看起来像这样:你从系统中运行的后台线程保存到共享首选项(例如,当使用android的开箱即用的SyncAdapter框架时)并尝试返回从UI线程中保存的值,您可能会得到默认/错误的值!
希望这对其他人有帮助......;)
| 归档时间: |
|
| 查看次数: |
1570 次 |
| 最近记录: |