版权声明:本文为博主原创文章,未经博主允许不得转载。
https://blog.csdn.net/susan_123456/article/details/92794337
Android上常见的数据存储方式为:
SharedPreferences
是 Android 中比较常用的存储方法,本篇将从源码角度带大家分析一下Android中常用的轻量级数据存储工具SharedPreferences。
1.什么是SharedPreferences?官方说法为:
- 它可以用来存储一些比较小的键值对集合;
- 对于任何一类的preference,SharedPreferences是唯一的;
- 会影响到主线程,造成卡顿,甚至造成anr;
- SharedPreferences不支持多进程;
2.SharedPreferences常用使用方法:
1)将数据保存至SharedPreferences
/*
*Context.MODE_PRIVATE: 默认操作模式,代表该文件是私有数据,只能被应用本身访问, 在该模式下,写入
*的内容会覆盖原文件的内容
*Context.MODE_APPEND: 该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件
*Context.MODE_WORLD_READABLE: 当前文件可以被其他应用读取
*Context.MODE_WORLD_WRITEABLE:当前文件可以被其他应用写入
*/
SharedPreferences preferences=getSharedPreferences("user",Context.MODE_PRIVATE);
Editor editor=preferences.edit();
String name="测试";
editor.putString("name", name);
editor.commit();
2)从SharedPreferences读取数据
SharedPreferences preferences=getSharedPreferences("user", Context.MODE_PRIVATE);
String name=preferences.getString("name", "123");
3.1 获取getSharedPreferences对象,做了哪些操作?
以下节选至ContextImpl.getSharedPreferences
源码片段:
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
// At least one application in the world actually passes in a null
// name. This happened to work because when we generated the file name
// we would stringify it to "null.xml". Nice.
if (mPackageInfo.getApplicationInfo().targetSdkVersion <
Build.VERSION_CODES.KITKAT) {
if (name == null) {
name = "null";
}
}
File file;
synchronized (ContextImpl.class) {
if (mSharedPrefsPaths == null) {
mSharedPrefsPaths = new ArrayMap<>();
}
file = mSharedPrefsPaths.get(name);
if (file == null) {
file = getSharedPreferencesP