SharedPreferences 存儲數據

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表明修改是否提交成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章