簡體   English   中英

Android - 擁有多個共享首選項是不好的做法嗎?

[英]Android - Is it bad practice to have multiple Shared Preferences?

我有一個使用SharedPreferences的應用程序。 一個只是存儲應用程序版本以檢查更改日志的更新,另一個包含一些布局信息, clear()在用戶選擇時被調用。 我終於設法讓一個PreferenceFragment工作並注意到了一個趨勢,所以我想我可能會在我偏愛瘋狂之前問這個(盡管我認為我已經足夠了)。

我盡力搜索並沒有特別提到問題,只是可以有倍數。

我有點擔心PreferenceManager.getDefaultSharedPreferences()抓錯了pref,但我可能只是誤解了用法。

我可以從我的活動中想到的唯一相關代碼:

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

這一點都不錯。 我認為情況正好相反。 我認為不同的行為應該使用不同的sharedPreference文件。

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

我想到了使用多個sharedPreference's以下優點。

  • 使用BackupManager時,可以提供要備份和還原的sharedPreference文件。
  • 當用戶注銷時,您可以刪除sharedPreference包含該用戶私有值的sharedPreference文件。 您可能不想刪除其他一些。

根據我對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%,因為如果用戶從App info屏幕按下Clear Data按鈕,它將被清除。 否則,在ExternalDirectory()創建文件或將您的信息發送到服務器。

遲到了,但我會說不要使用多個偏好 堅持使用getDefaultSharedPreferences 我看到很多人都無法跟蹤保存的首選項的名稱。 通常,它會以錯誤的方式使代碼更復雜(編譯器無法幫助您管理您的名稱)。 此外,共享首選項適用於少數幾個小值 - 使用Filesystem來處理大事,使用數據庫來處理大量數據。

我已經看到命名共享首選項被大量使用,我相信這是一個由copyPaste()傳播的不幸趨勢。

最后,您的偏好活動會寫入默認的共享首選項 - 我最近回答了一個問題 - 這是問題 - 如果使用默認首選項,將完全避免。 請參閱: Android SharedPreferences不會更改

您可能會考慮包裝默認的共享首選項方法,以使它們更加冗長,就像我在這里所做的那樣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM