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

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