[英]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
以下優點。
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.