作为一个轻量级的存储方式,SharedPreferences一直用来保存简单的配置信息,今天我们就来一起深入了解下它:
SharedPreferences的本质是用键值对的方式保存数据到xml文件,然后对文件进行读写操作。
public String getString(String key, @Nullable String defValue) {
synchronized (mLock) {
String v = (String)mMap.get(key);
return v != null ? v : defValue;
}
}
//第一把锁,操作Editor类的map对象
public final class EditorImpl implements Editor {
@Override
public Editor putString(String key, String value) {
synchronized (mEditorLock) {
mEditorMap.put(key, value);
return this;
}
}
}
//第二把锁,操作文件的写入
synchronized (mWritingToDiskLock) {
writeToFile(mcr, isFromSyncCommit);
}
1) SharedPreferences是进程不安全的,因为没有使用跨进程的锁。既然是进程不安全,那么久有可能在多进程操作的时候发生数据异常。
2) 我们有两个办法能保证进程安全:
if (!backupFileExists) {
!mFile.renameTo(mBackupFile);
}
https://juejin.im/post/6884505736836022280