ANR小记

anr的分类

当前的事件没有机会得到处理(即主线程正在处理前一个事件,没有及时的完成或者looper被某种原因阻塞住了)。当前的事件正在处理,但没有及时完成.

ANR 的全称是 Application No Responding,即应用程序无响应,具体是一些特定的 Message (Key Dispatch、Broadcast、Service) 在应用的UI线程(主线程)没有在规定的时间内处理完,进而触发 ANR 异常。

1.KeyDispatch Timeout :
  • 按键或触摸事件在特定时间内无响应,超时时间5秒。
  • 超时时间是在ActivityManagerService类中定义的。
2.Broadcast Timeout:
  • BroadcastReceiver在特定时间内无法处理完成。
  • 前台广播10秒,后台广播60秒。超时时间是在ActivityManagerService类中定义的。
  • 确保BroadcastReceiver在主线程中执行的逻辑简短且迅速,复杂的逻辑应当委托给异步任务处理。
3.ServiceTimeout
  • Service 在规定时间内无法处理完成操作,即会报出服务超时.
  • 这类 ANR 同样没有提示框出现。超时时间,前台 Service 是 20s,后台 Service 是 200s。
  • 对于长时间运行的服务,考虑使用IntentService或JobScheduler等方式异步执行任务,防止因超时而引发ANR。
ANR常见原因
1.耗时操作
  • 在Android应用的主线程(UI线程)中执行了过于耗时的操作,例如大量的数据处理、网络请求、数据库访问等。
  • 这些操作会阻碍主线程的正常消息循环,进而导致界面无法及时刷新响应用户操作。
2.同步锁等待
  • 主线程在获取或释放同步锁时长时间等待。
  • 例如由于其他线程持有锁而导致主线程被挂起,同样会导致ANR。
3.IO/CPU密集型操作
  • 大量占用CPU资源或等待IO操作完成导致主线程被抢占,不能及时响应触摸事件或其他UI事件。
  • 如前台在玩游戏,可能会导致你的后台广播被抢占。
  • 提高数据处理效率,减少不必要的计算与内存分配,尤其是对循环、递归等易产生性能瓶颈的地方进行优化。
4.复杂的布局渲染与内存泄漏
  • 布局层级过深或包含大量的视图元素,可能导致界面渲染缓慢。
  • 未及时释放的资源占用过多内存,导致应用运行缓慢。
  • 可以使用Hierarchy Viewer工具 检查布局层级,优化布局结构,减少不必要的嵌套。
  • 内存泄漏会导致应用占用过多内存,影响性能。可以使用MAT工具 检查内存泄漏,并及时修复。
ANR问题定位
1.日志分析(logcat)
  • 查看anr日志
    • 利用Android Studio自带的Logcat工具,搜索关键词"ANR"或"Input dispatching timed out",找到ANR发生时刻的日志记录。
    • 通常会包含有错误报告和堆栈信息,如导致ANR的进程、线程和代码位置。
  • 解析teaces.txt
    • ANR发生时,系统会在设备上生成traces.txt文件,它记录了所有线程的状态。
    • 通过ADB工具将其导出分析,可以定位到具体哪个线程可能引起阻塞。
2.使用性能分析工具
  • Android Profiler:实时监控CPU、内存、网络、磁盘I/O等资源使用情况,寻找可能导致ANR的性能瓶颈。
  • Systrace:系统层级的跟踪工具,能够追踪系统各组件间的交互和调度,帮助找出主线程阻塞的源头。
3.anr检测工具
  • 使用Android提供的ANR检测工具,如Traceview。
  • 可以获取应用程序的执行堆栈信息。通过分析堆栈信息,可以准确找到导致ANR的代码位置。
4.调试和单步执行
  • 通过在开发工具中进行调试和单步执行,可以逐步跟踪代码的执行过程。
  • 找到导致ANR的具体位置和原因。
相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone3 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen3 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone3 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui