首页 > 其他分享 >ANR出现的几种情况,ANR原因,如何排查ANR、避免ANR

ANR出现的几种情况,ANR原因,如何排查ANR、避免ANR

时间:2023-09-10 16:45:14浏览次数:40  
标签:BlockCanary 耗时 主线 程中 几种 排查 ANR CPU

ANR出现的几种情况

主线程在规定时间内未处理完相应工作,就会ANR。

① 输入事件(按键和touch)5s内未被处理;

② BroadcastReceiver的事件,onReceiver方法在规定时间内没处理完(前台广播10s,后台广播60s);

③ service前台20s后台200s未完成启动;

④ ContentProvider的publish在10s内没进行完。

造成ANR的原因

1、在主线程中执行了耗时操作,比如网络读取图片数据并进行图片转换;

2、在主线程中进行IO读写、磁盘读写、数据库读写等操作;

3、在主线程中大量创建新对象;

如何避免ANR

1、在UI线程中不要进行耗时操作;比如在Activity的onCreate()或者onResume()生命周期中不要做耗时操作;

2、创建子线程来执行耗时操作;

3、尽量使用Handler来处理主线程和子线程之间的交互;

4、可以使用AsyncTask来执行异步任务并及时更新UI;

如何排查ANR

1、查看报错的Log日志文件;具体可查看ANR的类型,CPU的使用情况等信息,并不能进行准确定位;

2、分析traces.txt文件;如果发生ANR异常,系统会在/data/anr/目录下生成traces.txt文件,可以通过分析traces.txt文件来查看产生ANR的原因,但前提是手机需要Root获取相应的权限;

3、使用BlockCanary第三方监控组件,BlockCanary可以对主线程进行完全透明的监控,而且如果遇到UI卡顿时能精确输出信息定位到问题所在,不需要像Logcat一样,慢慢去找。

 

BlockCanary的工作原理:

主要利用了主线程中的消息处理机制,在主线程中ActivityThread会默认创建一个Looper,而Looper会调用loop()方法不断从消息队列MessageQueue取出消息,然后通过dispatchMessage()方法进行消息的处理,通过ActivityThread的源码可以发现在dispatchMessage()方法的前后都有log输出事件,而dispatchMessage()是一次消息的处理过程,我们就可以计算从消息处理开始到消息处理结束的时间,如果这个时间超过了16ms的话,那么就可以认定是发生了UI卡顿现象,进而输出异常日志信息。

BlockCanary输出的信息:

(1)基本信息:安装包标示、机型、api等级、uid、CPU内核数、进程名、内存、版本号等;

(2)耗时信息:实际耗时、主线程时钟耗时、卡顿开始时间和结束时间;

(3)CPU信息:时间段内CPU是否忙,时间段内的系统CPU/应用CPU占比,I/O占CPU使用率;

(4)堆栈信息:发生卡慢前的最近堆栈,可以用来帮助定位卡慢发生的地方和重现路径;

 



标签:BlockCanary,耗时,主线,程中,几种,排查,ANR,CPU
From: https://www.cnblogs.com/Sharley/p/17691462.html

相关文章

  • 系统负载高排查
    情况1:CPU高、Load高top命令查询 情况2:CPU低、Load高通过指令ps-axjf查看是否存在D状态进程。D状态是指不可中断的睡眠状态。该状态的进程无法被kill,也无法自行退出。只能通过恢复其依赖的资源或者重启系统来解决。等待I/O的进程通过处于uninterruptiblesleep或D状态;......
  • Go 中几种常见的编程模式
    模式可以理解成最佳实践,或者是约定俗成的规范或套路,熟悉一些常见模式可以方便理解项目代码。本文是参考左耳朵耗子的专栏文章做的笔记,另外也缅怀一下耗子叔。slice切片的数据共享与扩容迁移切片的数据共享切片就像是在数组上开的窗口,透过切片窗口可以看到和修改底层数组。这......
  • 图文带你了解华为华三路由器交换机登录的几种方法(开局必备)
    作者:网络之路一天 首发公众号:网络之路博客(ID:NetworkBlog)前言我们学习路由交换就是在实际工作中来配置,解决客户或者上级给的需求,真正接触的就是实实在在的路由器跟交换机,当拿到一套全新的设备的时候,要知道如何去登录,以及一些注意的事项,这个比较关键,很多初学者用惯了模拟器,而模拟器......
  • 排查下级平台级联至视频汇聚融合平台EasyCVR的层级显示问题
    EasyCVR国标视频综合管理平台是一款以视频为核心的智慧物联应用平台。它基于分布式、负载均衡等流媒体技术进行开发,提供广泛兼容、安全可靠、开放共享的视频综合服务。该平台具备多种功能,包括视频直播、录像、回放、检索、云存储、告警上报、语音对讲、集群、智能AI分析以及平台级......
  • 安防教育直播项目应用中RTSPSever组件libEasyRTSPServer编译arm版本报undefined refer
    大家知道我们团队编译过很多产品的ARM版本,对用户来说,多一种编译方式也是多一种选择,所以我们一直在拓宽TSINGSEE青犀视频全线产品的运用范围。近期TSINGSEE青犀视频研发团队编译了libEasyRTSPServer的ARM版本,在此过程中,我们遇到了编译错误undefinedreferenceto`uselocale’。libE......
  • TSINGSEE青犀视频EasyDarwin开源平台源码二次开发报错service not found排查及解决
    TSINGSEE青犀视频开发的EasyDarwin开源平台提供的开源项目,拥有完整的源代码,帮助开发者更快更简单实现流媒体音视频产品功能,实现移动互联网流媒体直播点播。有位用户反馈在Windows环境下的EasyDarwin源码二次开发中,Git拉完源码,出现无法运行的情况,报:servicenotfound源码路径中找不......
  • 视频汇聚平台/视频管理平台EasyCVR开启后无法正常使用的原因排查
    EasyCVR视频汇聚平台能够在复杂的网络环境下,将各种分散的视频资源进行统一汇聚、整合和集中管理。在视频监控播放方面,EasyCVR支持多种播放协议,包括HLS、HTTP-FLV、WebSocket-FLV、WebRTC、RTSP和RTMP,并且支持对外分享。平台提供1、4、9、16个画面窗口播放的功能,可以同时播放多路视......
  • RTSP流媒体协议视频平台EasyNVR新版存在跨域问题的原因排查
    针对客户反馈的TSINGSEE青犀视频全线产品存在的跨域问题,以前的版本确实遇到过这类问题。目前,我们在服务器端已经进行了允许跨域的配置。然而,仍然有一些客户可能会遇到类似的问题。在本文中,我们将介绍我们采用的解决方法。我们测试了其他浏览器,都是可以获取数据的:我们注意到存在跨域......
  • 国标GB28181协议视频智能分析平台EasyGBS,其无法播放的常见原因及排查汇总
    关于EasyGBS服务稳定性的问题,TSINGSEE青犀视频平台一直备受咨询者关注。然而,服务稳定性与用户接入方式和配置密切相关。如果您对此有更详细的了解需求,我们建议您联系我们以获取测试版本进行自行测试。有时候用户会反映EasyGBS无法播放的问题,但是"不能播放"是一个广泛的概念,有很多可......
  • 排查国标GB28181视频监控平台EasyGBS无法播放且抓包返回ICMP的步骤
    GB28181视频平台EasyGBS是一个基于国标GB28181协议的视频云服务平台。它支持多路设备同时接入,并能将视频流以RTSP、RTMP、FLV、HLS、WebRTC等格式分发给多个平台和终端。该平台提供视频监控直播、云端录像、云存储、检索回放、智能告警以及语音对讲等功能。在视频能力方面,EasyGBS支......