今天调试代码发现大量的sp操作耗用了近3秒时间,当然里面交叉了gson操作。所以下面我查看了有关SharedPreference的文章
https://www.jianshu.com/p/63ee8587de3f 这是一篇非常有深度的文章。
引用这篇博客上面的代码
SharedPreferencesImpl(File file, int mode) {
mFile = file;
mBackupFile = makeBackupFile(file);
mMode = mode;
mLoaded = false;
mMap = null;
startLoadFromDisk();//
}
//初始化的时候会开一个线程去读取xml文件。
private void startLoadFromDisk() {
synchronized (this) {
mLoaded = false;
}
new Thread("SharedPreferencesImpl-load") {
public void run() {
loadFromDisk();
}
}.start();
}
@Nullable
public String getString(String key, @Nullable String defValue) {
synchronized (this) {
awaitLoadedLocked();
String v = (String)mMap.get(key);
return v != null ? v : defValue;
}
}
getString中有一个方法是awaitLoadedLocked();是等待是loadFromDisk()完成,所以在第一次获取SharedPreference时会耗一定时间,取决于本地缓存在sp中的数据。
在项目中选择了一个办法,在application中启动一个子线程去初始化sp