【Android】【框架】【磁盘缓存】【SharedPreferences】

本文探讨了Android中SharedPreferences作为内存缓存的使用,分析了引起ANR的原因,特别是在commit和apply操作中的问题。推荐使用MMKV作为更高效的缓存框架,替代SP来解决ANR和性能问题。同时,文章简述了磁盘缓存框架选型的考虑因素,并提供了进一步学习的资源链接。
摘要由CSDN通过智能技术生成

整体架构

初始化的时候会加载整个XML到内存中
作为内存缓存
这也是不能跨进程的原因,任何东西只要做缓存那就是2套数据了,即使SP做了多进程措施也无济于事

  1. 取:从内存取
  2. commit:直接同步执行
  3. apply:入队

 

引起ANR的原因

取是不会有ANR的,只需要在最初加载文件的时候读取一次即可,后续都是从内存去取
commit直接在当前线程执行,虽说SP是轻量级的IO,但是至少也是IO操作,做个最简单的IO操作,也要几百ms
apply入队本是对此很不错的优化,但是最坑的一点是,Activity、Service、Broadcast都会在某些条件下等待SP队列全部执行完成
Google美名其曰确保IO可以顺利执行

可以参考Activity ANR的堆栈

waitToFinish方法会加锁,等待queue清空

 public static void waitToFinish() {
        long startTime = System.currentTimeMillis();
        boolean hadMessages = false;

        Handler handler
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值