【分享】Project ANR

问题

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写(优化了50%)
  • 减少操作
  • 最后才是check架构(动架构有风险,Project此例中有丢config的风险)

结束语

GP后台关于ANR、Crash是基于session统计的

检查ANR、Crash时可以看看源代码,或许Android有主动修正

做应用,不看Framework

做业务,先到Framework里搜,看是否有提示

Powered by KyleCe

Copyright © 2015 - 2019 KyleCe All Rights Reserved.

访客数 : | 访问量 :