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)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容