Android中的getDefaultSharedPreferences和getSharedPreferences之间的区别是什么?有人能解释一下吗?
当前回答
让我们来回顾一下它们的基本区别:
getDefaultSharedPreferences() uses a default preference-file name. This default is set per application, so all activities in the same app context can access it easily as in the following example: SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this); if (spref.contains("email")) { String sEmailAddr = spref.getString("email", ""); } The preferences are usually stored at /data/data/com.package.name/shared_prefs/com.package.name_preferences.xml. The alternative method - getSharedPreferences(name,mode) requires to indicate a specific preference (file) name and an operation mode (e.g. private, world_readable, etc.)
正如copoli所提到的,结果是相同的,但是第一个选项更简单,并且缺乏拆分到多个首选项文件的灵活性,这是由getSharedPreferences()的第二个选项提供的。 使用MODE_WORLD_READABLE操作指示符在应用程序之间共享首选项也可以使用getSharedPreferences(),但很少使用。
恕我冒犯,getDefaultSharedPreferences()可以安全地使用,而不会陷入容易出现错别字和混乱的多个首选项文件名的混乱,除非你希望应用程序中的不同模块将使用不同的首选项文件。通常这是不需要的。如果应用程序需要保存大量参数,可能使用外部数据库会更好,因为它也提供了更好的数据保护。
如果有人知道定期使用getSharedPreferences()而不是getDefaultSharedPreferences()的好理由,请在这里评论让我知道。
其他回答
让我们来回顾一下它们的基本区别:
getDefaultSharedPreferences() uses a default preference-file name. This default is set per application, so all activities in the same app context can access it easily as in the following example: SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this); if (spref.contains("email")) { String sEmailAddr = spref.getString("email", ""); } The preferences are usually stored at /data/data/com.package.name/shared_prefs/com.package.name_preferences.xml. The alternative method - getSharedPreferences(name,mode) requires to indicate a specific preference (file) name and an operation mode (e.g. private, world_readable, etc.)
正如copoli所提到的,结果是相同的,但是第一个选项更简单,并且缺乏拆分到多个首选项文件的灵活性,这是由getSharedPreferences()的第二个选项提供的。 使用MODE_WORLD_READABLE操作指示符在应用程序之间共享首选项也可以使用getSharedPreferences(),但很少使用。
恕我冒犯,getDefaultSharedPreferences()可以安全地使用,而不会陷入容易出现错别字和混乱的多个首选项文件名的混乱,除非你希望应用程序中的不同模块将使用不同的首选项文件。通常这是不需要的。如果应用程序需要保存大量参数,可能使用外部数据库会更好,因为它也提供了更好的数据保护。
如果有人知道定期使用getSharedPreferences()而不是getDefaultSharedPreferences()的好理由,请在这里评论让我知道。
getSharedPreferences()和getDefaultSharedPreferences()都用于访问应用程序级别的首选项。getDefaultSharedPreferences()用于获得与Android的总体首选项框架一致的共享首选项。最好使用getDefaultSharedPreferences(),因为它提供了默认情况下与PreferenceActivity一起工作的SharedPreferences对象。
还有第三个功能:
public SharedPreferences Activity.getPreferences(int mode) {}
看我的问题和答案在这里:混乱的共享偏好的android -使用哪个功能?
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;
}
我知道这篇文章有点老,但是从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
推荐文章
- 使用什么api来绘制其他应用程序(如Facebook的Chat Heads)?
- getDefaultSharedPreferences和getSharedPreferences的区别
- 如何模拟按钮点击使用代码?
- Android Webview给出net::ERR_CACHE_MISS消息
- Parcelable遇到IOException写入序列化对象getactivity()
- 如何在Android中动态更改菜单项文本
- 如何将Base64字符串转换为位图图像,以显示在一个ImageView?
- 新版本的Android模拟器问题-模拟器进程已终止
- 没有与请求版本匹配的NDK版本
- 如何将一个颜色整数转换为十六进制字符串在Android?
- 格式浮动到小数点后n位
- 移除一个onclick监听器
- 如何圆形图像与滑翔图书馆?
- 测试者从哪里下载谷歌Play Android应用?
- Android Studio在创建新项目时卡住了Gradle下载