final class SharedPreferencesImpl implements SharedPreferences {
...
private final File mFile;
private final File mBackupFile;
private final int mMode;
private final Object mLock = new Object();
@GuardedBy("mLock")
private Map<String, Object> mMap;
...
SharedPreferencesImpl(File file, int mode) {
mFile = file;
mBackupFile = makeBackupFile(file);//创建备份文件
mMode = mode;
mLoaded = false;
mMap = null;
startLoadFromDisk();//创建SharedPreference对象时,就开始从sd卡中加载文件内容了
}
private void startLoadFromDisk() {
synchronized (mLock) {
mLoaded = false;
}
new Thread("SharedPreferencesImpl-load") {//子线程
public void run() {
loadFromDisk();//子线程中去加载文件
}
}.start();
}
private void loadFromDisk() {
synchronized (mLock) {
if (mLoaded) {
return;
}
if (mBackupFile.exists()) {
mFile.delete();
mBackupFile.renameTo(mFile);
}
}
// Debugging
if (mFile.exists() && !mFile.canRead()) {
Log.w(TAG, "Attempt to read preferences file " + mFile + " without permission");
}
Map map = null;
StructStat stat = null;
try {
stat = Os.stat(mFile.getPath());
if (mFile.canRead()) {
BufferedInputStream str = null;
try {
str = new BufferedInputStream(
new FileInputStream(mFile), 16*1024);
map = XmlUtils.readMapXml(str);//解析xml文件,把文件中键值对全部读取出来放到Map里
} catch (Exception e) {
Log.w(TAG, "Cannot read " + mFile.getAbsolutePath(), e);
} finally {
IoUtils.closeQuietly(str);
SharedPreference源码简析
最新推荐文章于 2021-07-24 09:42:42 发布