美文网首页
Android ANR

Android ANR

作者: ByteCarry | 来源:发表于2019-05-11 12:53 被阅读0次

Android ANR

背景

当应用的UI线程阻塞过长时间,就会触发应用程序无响应(Application No Responding)。

触发条件

  1. 当应用的Activity处于前台,应用没有在5秒内响应一个输入事件(例如按键或者触摸屏幕)或者广播接收者。
  2. 当没有Activity处于前台,应用的广播接收者没有在相当长的时间内完成执行。

探测和诊断ANR

  • Android vitals

  • 诊断ANR问题一些可能路径

    1. 主线程进行IO操作

    2. 主线程进行耗时计算

    3. 主线程同步等待另一个进程的绑定调用,而另一个进程需要长时间才能返回。

    4. 主线程阻塞等待另一个线程同步代码的操作

    5. 主线程和其他线程死锁了。

    6. 工作线程持有主线程必须的加锁的资源也会导致ANR

一些手段

  • 启用严格模式StrictMode有助于发现偶然的主线程IO操作影响。

  • 启用后台ANR对话框(开发者模式-启用所有的ANR).

  • 使用Traceview工具获取应用运行时的跟踪信息,确定主线程繁重操作的地方。

  • ANR发生时会生成追踪文件,分析该文件中的信息有助于查找ANR产生的原因。老版本的OS:/data/anr/traces.txt,新版本的OS:/data/anr/trace_xxx.txt.通过adb导出该文件:

    adb root
    adb shell ls /data/anr
    adb pull /data/anr/<filename>
    
扫码领红包支持

相关文章

网友评论

      本文标题:Android ANR

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