Android - 拥有多个共享首选项是坏做法吗?

2022-09-01 19:07:47

我有一个应用程序正在使用.一个只是存储应用程序版本以检查更新日志,另一个包含一些布局信息,这些信息在用户选择时被调用。我终于设法得到了一个工作并注意到了一个趋势,所以我想我现在可以在我疯狂偏好之前问这个问题(尽管我认为我受够了)。SharedPreferencesclear()PreferenceFragment

我已经尽了最大努力进行搜索,没有看到具体提到问题,只是有可能有多个。

我有点担心抓取错误的pref,但我可能只是误解了用法。PreferenceManager.getDefaultSharedPreferences()

我能从我的活动中想到的唯一相关代码:

SharedPreferences storedVer = getSharedPreferences(VER_NUM, 0);
SharedPreferences savedLayout = getSharedPreferences(LAYOUT_SAVE, 0);

答案 1

这根本不是坏习惯。我认为情况恰恰相反。我认为不同的行为应该使用不同的文件。sharedPreference

.getDefaultSharedPreferences()使用默认文件。其他人创建自己的文件。com.company.packagename.xml

使用多个的以下优点出现在我的脑海中。sharedPreference's

  • 使用 BackupManager 时,可以提供要备份和还原的文件。sharedPreference
  • 当用户注销时,您可以删除其中包含该用户私有值的文件。您可能不想删除其他一些。sharedPreference

答案 2

根据我的经验,我注意到以下几点:SharedPreferences

1)始终尝试使您的姓名和属性名称在整个设备中唯一。SharedPreference

2)不要使用你的名字,如“我的Preference”,“首选项”,“appPreference”...等。使用 您的作为名称的唯一标识符。SharedPreferencePackageNameSharedPreference

例:

SharedPreferences preferences = getSharedPreferences(Context.getPackageName(), Context.MODE_PRIVATE);   

3) 通过将属性名称与包名称连接起来,还可以为您的属性使用唯一的 Keys。

例:

Editor editor = sharedpreferences.edit();
boolean isAdminKey = Context.getPackageName()+"admin";
editor.putString(isAdminKey , "value");
editor.commit();

4)用一个键值编辑多个键值没有问题。commit()

5)在创建首选项时使用,以防止其他应用程序读取您的.例如,请参阅步骤 2MODE_PRIVATESharedPreferences

6)不要依赖100%,因为如果用户从应用程序信息屏幕按下按钮,它将被清除。否则,请在 中创建文件或将您的信息发送到服务器。SharedPreferencesClear DataExternalDirectory()


推荐