ANR原理与问题分析

  1. ANR工作原理
    Application Not Responding,应用程序无响应。工作线程向检测线程发送请求,检测线程初始化检测状态,开始计时,工作线程业务执行完成后向检测线程发送清除检测请求,检查线程在计时时间内未收到清除请求则进行超时处理并发送ANR弹窗。
  2. ANR分类
  • 应用ANR:按键超时(5s),广播处理超时(10s),服务处理超时(20s)
  • 系统ANR:Watchdog超时(60s) ,监控整个system_service进程的,超时会重启系统
  1. ANR问题的分析方法
  • 原因:
    1)在主线程里面有耗时的操作,或者逻辑里面有异常进入死循环的状态。
    2)线程之间通信造成阻塞(trace文件),或者线程挂起后没有被唤起。
    3)其他进程抢占CPU。
  • ANR现场
    1)apps/android.txt 出错进程,出错原因,CPU占用率
    2)anr/traces.txt 出错进程内部线程的堆栈信息
  1. 广播ANR分析
    广播投递即开始计时,并设置超时消息。广播事件共享UI线程消息队列,要排队,此队列消息处理直接影响广播事件的处理。调用onReceive()处理广播,处理效率直接影响计时。finishReceiver()通知AMS不及时,将影响到超时消息的移除。
    'adb shell dumpsys activity broadcasts' 查看广播注册信息,查看广播都有谁接收。

  2. ANR问题的分析方法
    1)查找ANR进程原因。
    2)检查cpu负载情况,cpu是否被抢占
    3)查看调用堆栈,分析代码(耗时,死循环,线程阻塞或挂起)

  3. ANR问题的优化方向

  • 避免在主线程进行复杂的操作
  • 广播接收不要进行复杂的操作
  • 服务生命周期函数不要进行复杂操作
  • 编码注意边界条件控制 避免死循环
  • 在设计及编码阶段避免出现同步/死锁

你可能感兴趣的:(ANR原理与问题分析)