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的具体位置和原因。
相关推荐
建群新人小猿19 分钟前
CRMEB-PRO系统定时任务扩展开发指南
android·java·开发语言·前端
百流1 小时前
ES使用之查询方式
android·大数据·elasticsearch
每次的天空2 小时前
Android学习总结之自定义view设计模式理解
android·学习·设计模式
是店小二呀3 小时前
【优选算法 | 前缀和】前缀和算法:高效解决区间求和问题的关键
android·c++·算法
l and3 小时前
适配 AGP8.5,maven 私服发布报错(七)
android·maven
_extraordinary_3 小时前
MySQL 基本查询(一)
android·数据库·mysql
Json_181790144804 小时前
闲鱼商品详情API接口概述及JSON数据参考
android·大数据·python
官乐5 小时前
pycharm导入同目录下文件未标红但报错ModuleNotFoundError
android·ide·pycharm
ylineyline7 小时前
React-Native Android 多行被截断
android·react native·react.js·截断·多行·cut off
决胜万里13 小时前
Android WIFI体系
android