Android ANR

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>
    
扫码领红包支持
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ==================================================== 一:什么...
    爱情小傻蛋阅读 9,922评论 3 31
  • 从技术的角度看,ANR对用户体验的伤害仅次于Crash。多年的开发实践过程中遇到过不少ANR问题,有两次印象比较深...
    omottec阅读 2,216评论 0 10
  • 什么是 ANR? 在 Android 上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个...
    Little丶Jerry阅读 408评论 0 1
  • 因为一个人爱上一座城,而我却是因为一座城而爱上一个人。我没有去过很多个城市,没有特别喜欢的,也没有特别有感觉的。 ...
    613f920061e7阅读 193评论 0 1
  • 一场大雪降临,仿佛要洗净世间所有的罪恶。 风雪向来是磨难的象征,阳光是希望。大雪过后阳光来临,仿佛一切都是那么美好...
    苹果鸭梨阅读 205评论 0 0