SharedPreferences 存储数据
原创
©著作权归作者所有:来自51CTO博客作者wx637304bacd051的原创作品,请联系作者获取转载授权,否则将追究法律责任
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表明修改是否提交成功