Android中的getDefaultSharedPreferences和getSharedPreferences之间的区别是什么?有人能解释一下吗?
当前回答
注意,使用默认的共享首选项与使用包名的共享首选项是不同的:
context.getSharedPreferences(getPackageName(), MODE_PRIVATE);
=>共享首选项名称:"com.my.packagename"
PreferenceManager.getDefaultSharedPreferences(context);
=>共享首选项名称:"com.my.packagename_preferences"
其他回答
注意,使用默认的共享首选项与使用包名的共享首选项是不同的:
context.getSharedPreferences(getPackageName(), MODE_PRIVATE);
=>共享首选项名称:"com.my.packagename"
PreferenceManager.getDefaultSharedPreferences(context);
=>共享首选项名称:"com.my.packagename_preferences"
我知道这篇文章有点老,但是从24.0.1版本的v7支持库开始,您就可以在任何地方通过上下文检索默认首选项
// context might be an application context, activity, ..
// so if you want to get your apps defaults, pass an activity context
PreferenceManager.getDefaultSharedPreferences(context)
看到https://developer.android.com/reference/android/support/v7/preference/PreferenceManager getdefaultsharedpreferences
getDefaultSharedPreferences将使用一个默认名称,如“com.example”。something_preferences”,但是getSharedPreferences需要一个名称。
getDefaultSharedPreferences实际上使用Context。getSharedPreferences(下面是直接来自Android源代码):
public static SharedPreferences getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
getDefaultSharedPreferencesMode());
}
private static String getDefaultSharedPreferencesName(Context context) {
return context.getPackageName() + "_preferences";
}
private static int getDefaultSharedPreferencesMode() {
return Context.MODE_PRIVATE;
}
还有第三个功能:
public SharedPreferences Activity.getPreferences(int mode) {}
看我的问题和答案在这里:混乱的共享偏好的android -使用哪个功能?
getSharedPreferences()和getDefaultSharedPreferences()都用于访问应用程序级别的首选项。getDefaultSharedPreferences()用于获得与Android的总体首选项框架一致的共享首选项。最好使用getDefaultSharedPreferences(),因为它提供了默认情况下与PreferenceActivity一起工作的SharedPreferences对象。
推荐文章
- 警告:API ' variable . getjavacompile()'已过时,已被' variable . getjavacompileprovider()'取代
- 安装APK时出现错误
- 碎片中的onCreateOptionsMenu
- TextView粗体通过XML文件?
- 如何使线性布局的孩子之间的空间?
- DSL元素android.dataBinding。enabled'已过时,已被'android.buildFeatures.dataBinding'取代
- ConstraintLayout:以编程方式更改约束
- PANIC: AVD系统路径损坏。检查ANDROID_SDK_ROOT值
- 如何生成字符串类型的buildConfigField
- Recyclerview不调用onCreateViewHolder
- Android API 21工具栏填充
- Android L中不支持操作栏导航模式
- 如何在TextView中添加一个子弹符号?
- PreferenceManager getDefaultSharedPreferences在Android Q中已弃用
- 在Android Studio中创建aar文件