我有一个使用SharedPreferences
的应用。一个只是存储应用程序版本以检查更新日志的更新,另一个包含一些布局信息clear()
在用户选择时被调用。我终于设法得到一个PreferenceFragment
工作并注意到一个趋势,所以我想我可能会在我偏爱疯狂之前问这个(尽管我认为我已经足够了)。
我尽力搜索并没有特别提到问题,只是可能有多个。
我有点担心PreferenceManager.getDefaultSharedPreferences()
抓错了pref,但我可能只是误解了用法。
我可以从我的活动中想到的唯一相关代码:
SharedPreferences storedVer = getSharedPreferences(VER_NUM, 0);
SharedPreferences savedLayout = getSharedPreferences(LAYOUT_SAVE, 0);
答案 0 :(得分:14)
这一点都不错。我认为情况正好相反。我认为不同的行为应该使用不同的sharedPreference
文件。
.getDefaultSharedPreferences()
使用默认的com.company.packagename.xml
文件。其他人创建自己的文件。
在我的脑海中出现了使用多个sharedPreference's
的以下优点。
sharedPreference
个文件。 sharedPreference
文件。您可能不想删除其他一些。答案 1 :(得分:5)
根据我对SharedPreferences
的经验,我注意到以下内容:
1)始终使用try尝试使您的SharedPreference
名称和属性名称在整个设备上都是唯一的。
2)请勿使用SharedPreference
的名称,例如“myPreference”,“preference”,“appPreference”等。使用PackageName
作为SharedPreference
名称的唯一标识符。
示例:
SharedPreferences preferences = getSharedPreferences(Context.getPackageName(), Context.MODE_PRIVATE);
3)通过将属性名称与包名称连接,也可以为属性使用唯一的键。
示例:
Editor editor = sharedpreferences.edit();
boolean isAdminKey = Context.getPackageName()+"admin";
editor.putString(isAdminKey , "value");
editor.commit();
4)使用一个commit()
编辑多个Keys值没问题。
5)在创建偏好设置时使用MODE_PRIVATE
,以防止其他应用程序读取您的SharedPreferences
。例如,参见步骤2
6)不要依赖SharedPreferences
100%,因为如果用户从应用信息屏幕按下Clear Data
按钮,它将被清除。否则,在ExternalDirectory()
中创建文件或将您的信息发送到服务器。
答案 2 :(得分:0)
晚会但我会说不使用多个偏好。坚持getDefaultSharedPreferences
。我看到很多人都无法跟踪保存的首选项的名称。通常,它会以错误的方式使代码更复杂(编译器无法帮助您管理您的名称)。此外,共享首选项适用于少数几个小值 - 使用Filesystem来处理大事,使用数据库来处理大量数据。
我已经看到使用了很多命名的共享首选项,我相信这是copyPaste()
传播的一个不幸的趋势。
最后,您的偏好活动会写入默认的共享首选项 - 我最近回答了一个问题,即如果使用默认首选项,则会完全避免这个问题。请参阅:Android SharedPreferences not changing
您可以考虑包装默认的共享偏好设置方法,使其更加冗长,就像我已经完成here
一样