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

zio*_*amt 20 java android sharedpreferences

我有一个应用程序正在使用SharedPreferences.一个只是存储应用程序版本以检查更改日志的更新,另一个包含一些布局信息,clear()在用户选择时调用.我终于设法开始PreferenceFragment工作并注意到了一个趋势,所以我想在我偏爱之前我可能会问这个问题(尽管我认为我已经足够了).

我尽力搜索并没有特别提到问题,只是可以有倍数.

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

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

SharedPreferences storedVer = getSharedPreferences(VER_NUM, 0);
SharedPreferences savedLayout = getSharedPreferences(LAYOUT_SAVE, 0);
Run Code Online (Sandbox Code Playgroud)

tas*_*iac 15

这一点都不错.我认为情况正好相反.我认为不同的行为应该使用不同的sharedPreference文件.

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

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

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


Sam*_*awy 6

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

1)始终使用try来使您的SharedPreference名称和属性名称在整个设备上唯一。

2)请勿使用您的名称,SharedPreference例如“ myPreference”,“ preference”,“ appPreference” ...等。使用your PackageName作为SharedPreference名称的唯一标识符。

例:

SharedPreferences preferences = getSharedPreferences(Context.getPackageName(), Context.MODE_PRIVATE);   
Run Code Online (Sandbox Code Playgroud)

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

例:

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

4)用1编辑多个Key值没有问题commit()

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

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

  • 此外,当用户想要清除数据时,也应该清除数据。没有阻止它的意义。 (3认同)
  • 我认为直接在外部目录中创建文件是不好的做法。当您这样做时,您会集结用户文件系统和SD卡。我有来自各种应用程序的数十个文件夹。我在外部文件系统中使用提供的位置。当用户选择清除数据时,它也会被删除。 (2认同)