问题
ActivityThread waitToFinish
SharePreferenceImpl
原因
Project SP操作统一到同一个进程
- 每次edit都直接apply(初衷— 保证所有数据都生效)
分析及解决
6.0 — 7.x ,6.0占比 >96%,6.0及以前的读操作是阻塞的(阻塞ActivityThread)
SharePreference提交记录:
- 第一次读操作不加锁(AndroidFramework7.0开始)
- 合并写(最后一次改动才写)(AndroidFramework8.0开始)
- 用generation的概念区分最近的一次改动
优化点
- 少用
- 消减不必要写操作
- 存储是分类型的
- SP是xml文件,真的需要都写到xml文件里吗?
- 2进制文件写速度快于xml文件
- SP是xml文件,真的需要都写到xml文件里吗?
方法
- 先清理无用SP写(优化了50%)
- 减少操作
- 最后才是check架构(动架构有风险,Project此例中有丢config的风险)
结束语
GP后台关于ANR、Crash是基于session统计的
检查ANR、Crash时可以看看源代码,或许Android有主动修正
做应用,不看Framework
做业务,先到Framework里搜,看是否有提示