您的位置:首页 > 新闻 > 会展 > 自建站怎么做_网页设计模板图片中文_黄冈seo顾问_广州竞价托管

自建站怎么做_网页设计模板图片中文_黄冈seo顾问_广州竞价托管

2025/2/25 2:38:02 来源:https://blog.csdn.net/m0_60610120/article/details/145713285  浏览:    关键词:自建站怎么做_网页设计模板图片中文_黄冈seo顾问_广州竞价托管
自建站怎么做_网页设计模板图片中文_黄冈seo顾问_广州竞价托管
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的具体位置和原因。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com