Update SharedPreferences.md

master
Omooo 5 years ago
parent 97b69c6ae9
commit 0fbfc76c9d
  1. 18
      blogs/Android/SharedPreferences.md

@ -408,6 +408,22 @@ SharedPreferencesImpl#getXxx :
3. 不要使用 MODE_MULTI_PROCESS
4. 高频写操作的 key 与高频读操作的 key 可以适当的拆分文件,以减少同步锁竞争
5. 不要连续多次 edit,每次 edit 就是打开一次文件,应该获取一次 edit,然后多次执行 putXxx,减少内存波动,所以在封装方法的时候要注意了
6. apply 在 QueueWork 维护的单线程池调用,虽然是异步的但是可能会阻塞 Service.onStop 和 Activity.onPause 方法,可能会导致 ANR
ANR 容易发生的地方:
1. sp.getXxx,首先会调用 awaitLoadedLocked 等待首次 sp 文件创建与读取操作完成
2. sp.apply 虽然是异步的但是可能会在 Service Activity 等生命周期期间 mcr.writtenToDiskLatch.await() 等待过久
3. sp.commit 最终会调用 sp.writeToFile 方法,很耗时
4. ContextImpl.getSharedPreferences,主线程直接调用的话,如果 sp 文件很大处理时间也就会变成
#### 时序图
引自以下参考文章:
![](https://i.loli.net/2020/04/10/P7LHhcNxCrUvuAq.png)
#### 参考
@ -415,3 +431,5 @@ SharedPreferencesImpl#getXxx :
[浅析SharedPreferences](https://juejin.im/post/5bcbd780f265da0ad948056a)
[SharedPrederences 源码视角](https://xiaozhuanlan.com/topic/4509731862)

Loading…
Cancel
Save