美文网首页
ANR原理与问题分析

ANR原理与问题分析

作者: leo567 | 来源:发表于2020-03-09 15:08 被阅读0次
    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原理与问题分析

          本文链接:https://www.haomeiwen.com/subject/hyaudhtx.html