Android ANR 相关总结

ANR产生原因

出现ANR一般有以下几种原因:

  1. KeyDispatchTimeout(常见)
    input事件在5s内没有处理完成
    logcat日志关键字:Input event dispatching timed out
  2. BroadcastTimeout
    前台Broadcast:onReceiver在10S内没有处理完成发生ANR。
    后台Broadcast:onReceiver在60s内没有处理完成发生ANR。
    logcat日志关键字:Timeout of broadcast BroadcastRecord
  3. ServiceTimeout
    前台Service:onCreate,onStart,onBind等生命周期在20s内没有处理完成发生ANR。
    后台Service:onCreate,onStart,onBind等生命周期在200s内没有处理完成发生ANR
    logcat日志关键字:Timeout executing service
  4. ContentProviderTimeout
    ContentProvider 在10S内没有处理完成发生ANR。
    logcat日志关键字:timeout publishing content providers

典型的ANR场景

1)主线程频繁进行IO操作,比如读写文件或者数据库;
2)硬件操作如进行调用照相机或者录音等操作;
3)多线程操作的死锁,导致主线程等待超时;
4)主线程操作调用join()方法、sleep()方法或者wait()方法;
5)耗时动画/耗资源行为导致CPU负载过重
6)system server中发生WatchDog ANR;
7)service binder的数量达到上限

获取ANR 日志

导出ANR traces 文件(解决无权限、Permission denied)

你可能感兴趣的:(Android ANR 相关总结)