Sharedpreference是一個輕量級的以kv形式存儲的數據結構。存儲文件以xml的形式存在,位置位於安裝目錄/shared_prefs/。
1.獲取默認的Sharedpreference
在android 29 之前我們可以通過getDefaultSharedPreferences獲取
PreferenceManager.getDefaultSharedPreferences
通過源碼發現其內部是通過getSharedPreferences實現的,名稱是getDefaultSharedPreferencesName即Package.name + “_preferences”
public static SharedPreferences getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
getDefaultSharedPreferencesMode());
}
public static String getDefaultSharedPreferencesName(Context context) {
return context.getPackageName() + "_preferences";
}
private static int getDefaultSharedPreferencesMode() {
return Context.MODE_PRIVATE;
}
其存儲位置:安裝目錄/shared_prefs/com.example.qwe_preferences.xml
android 29因爲廢棄了PreferenceManager,所以只能通過context.getSharedPreferences
來獲取,由於上面我們已經分析了,默認的Sharedpreference文件名稱爲:Package.name + “_preferences”,
獲取默認的SharedPreferences
getSharedPreferences(getPackageName() + "_preferences",0);
2.getSharedPreferences 函數
//@param name:存儲文件名稱,eg:name="xxx"
//@param mode:讀取模式
//MODE_PRIVATE=0x0000,只允許程序內部讀寫
//MODE_WORLD_READABLE= 0x0001:允許外包程序讀
//MODE_WORLD_WRITEABLE = 0x0002:允許外部程序寫
public SharedPreferences getSharedPreferences(String name, int mode)
3.SharedPreferences 存取
eg:寫入一個String
SharedPreferences perfence = getSharedPreferences("test_preference",0);
SharedPreferences.Editor edit = perfence.edit();
edit.putString("test","123");
edit.commit();
eg:讀取所有的存儲kv
SharedPreferences perfence = getSharedPreferences("test_preference",0);
Map<String, ?> map = perfence.getAll();
eg:讀取指定key的value
SharedPreferences perfence = getSharedPreferences("test_preference",0);
String val = perfence.getString("default","");
4.SharedPreferences.Editor的commit和apply的區別
1.commit: 同步的提交到硬件磁盤
2.apply:將修改數據原子提交到內存, 而後異步真正提交到硬件磁盤。不保證文件100%落地
3.因爲apply只提交到內存,所以效率高於commit
4.apply沒有返回值,commit返回boolean表明修改是否提交成功