草庐IT

【Android】如何分析 ANR 日志

前言前两天,我已经写了一篇文章对ANR的产生原理进行了简单的探讨,链接如下:【Android】ANR原理解析感兴趣的大佬可以前去观摩观摩,今天这篇文章,将写写如何进行ANR日志的分析。导致ANR的原因应用层导致的ANR(耗时操作)主线程耗时长主线程方法执行了死循环主线程等待子线程释放锁时间过长应用内存紧张,当一个应用长期处于内存紧张状态,会导致频繁内存交换,进而导致应用的一些操作超时系统层导致的ANRCPU被抢占:一般来说,前台在玩游戏,可能会导致你的后台广播被抢占CPU系统服务无法及时响应:比如获取系统联系人等,系统的服务都是Binder机制,服务能力也是有限的,有可能系统服务长时间不响应导

【FAQ】【ANR问题】第一次显示出ANR弹框时没有收到SIGQUIT信号,同时系统也没有生成traces日志文件,点击 ANR 弹框中的等待时,第二次出现ANR弹框时接收到SIGQUIT信号

【问题描述】第一次显示出ANR弹框时没有收到SIGQUIT信号,同时系统也没有生成traces日志文件,点击ANR弹框中的等待时,第二次出现ANR弹框时接收到SIGQUIT信号,想了解鸿蒙的ANR流程相较Android是做了较大的改动吗【解决方案】1、在HOS2.0版本上,华为针对安卓原生ANR机制做了增强,主要是解决由于应用卡死导致系统黑屏无响应的情况,安卓原生ANR机制无法监控到该类故障(比如:无焦点窗口)。华为检测到该类型的故障会弹ANR框提示。故障日志系统会保留,由于这类故障一般是由于系统服务导致所以没有开放给应用。2、如果需要这类日志,可以升级HOS2.0.1版本,安卓原生的ANR也

[068]破局ANR

前言ANR是Android中经常遇到的问题,常规的ANR问题,一般可以通过adb日志和trace文件,找到导致ANR的原因,但是有很多偶发的ANR问题,难以采用常规的手段来分析的,通过学习字节跳动整治ANR的系列文章,聊聊自己的感悟。字节跳动技术团队整治ANR系列文章一、工程师的噩梦如下主线程的trace日志,想必这个日志是工程师的噩梦,为什么是噩梦?因为一般遇到这种日志,如果应用的日志不多,系统的日志不多,基本就是无解的存在。android.os.MessageQueue.nativePollOnce(NativeMethod)android.os.MessageQueue.next(Mes

[ANR] 优化SharedPreference apply引起的ANR问题

前一篇文章[ANR]为什么SharedPreference会引起ANR,我们知道,SharedPreference的apply方法虽然是异步写入文件的,但是会在Activity和Service生命周期方法调用的时候,等待所有的写入完成,可能引起卡顿和ANR。解决方法为了快速解决这个问题,我们可以通过代理系统SharedPreference的所有apply方法,改为直接在子线程调用commit,即可。下面看代码。ps:以下代码可以直接复制使用。classNoMainThreadWriteSharedPreferencesprivateconstructor(privatevalsysPrefs:

Android的ANR原理分析

大概Android的ANR主要有两种方式:1.通过handler的延迟机制触发ANR2.Input事件触发ANRService、BroadcastReceiver、ContentProvider都是通过Hander机制触发ANR。ANR的发生的场景有:servicetimeout:前台服务在20s未执行完,后台服务200s未执行完。BroadcastQueuetimeout:前台广播在10s未执行完,后台广播在60s未执行完。ContentProvidertimeout:ContentProvider在发布时超过10s未执行完。InputDispatchingTimeout:输入分发事件超过5

[ANR监控] ANR捕获,这些要点你必须知道

大家都知道,当发生ANR后,App会弹窗提示”应用失去响应,是否重启“,然后系统会dump一份trace文件,存在data/anr目录下。普通应用如何监控ANR的发生呢?这个时候,系统肯定是知道ANR发生了,所以像Console和Firebase这些工具都能很好的拿到ANR发生的时间和trace文件的内容。但是,作为面向普通应用的监控sdk,很多系统应用有的权限都没有,我们怎么才能判断ANR的发生呢?另外高版本的Android系统,限制了普通应用读取trace文件的权限,我们又如何拿到ANR发生时dump出来的trace文件呢?ANR捕获的基本原理发生ANR的时候,系统的system_serv

[ANR] Input ANR是怎么产生的

最近在做ANR优化,发现线上非常多的ANR(一半以上)原因都是Inputdispatchingtimedout。对于Activity或Service生命周期的ANR产生原理,我想大家应该都比较了解了,就是在AMS里埋炸弹、拆炸弹那一套机制,那InputDispatchingtimeoutANR是怎么产生的呢?这篇文章带大家一起学习一下。Android输入系统InputDispatchingtimeoutANR是有Android点击事件超时所产生的,所以要了解它产生的原理,就要从Android的输入系统开始讲起。Android输入系统,主要包含以下几个模块:发送端:运行在system_serve

android ANR发生的原因总结和解决办法

ANR的全称是applicationnotresponding,意思就是程序未响应,类似于我们在windows上见到的程序未响应。ANR发生会使用户觉得我们的程序不友好,那么什么情况会导致ANR的发生呢?首先ANR的发生是有条件限制的,分为以下三点:只有主线程才会产生ANR,主线程就是UI线程;必须发生某些输入事件或特定操作,比如按键或触屏等输入事件,在BroadcastReceiver或Service的各个生命周期调用函数;上述事件响应超时,不同的context规定的上限时间不同a.主线程对输入事件5秒内没有处理完毕b.主线程在执行BroadcastReceiver的onReceive()函

Android 查看ANR和Crash日志(adb bugreport)

今天测试那儿出了个ANR,我自己手机没问题,很烦,定位不了位置。于是还是得用ADB连接来看一下,之前用,但是老是会忘记,今天总结一下。ADB命令查看应用包名_adb查看包名命令_&岁月不待人&的博客-CSDN博客上面的连接是之前用adb后写的一篇常用的一些密令总结。ANR的排查一般相对于crash要烦一些,毕竟AndroidStudio的logcat看不到。打开控制台哈,windows系统win+r输入cmd,然后enter;mac你在对应文件夹右键选择里点击就行了。第一个:查看Crash当然你要用adb也可以查看:adblogcat>crash.log这个密令你在哪个文件目录运行的他就会在哪

SharedPreferences详解及其ANR解决方案

关于作者:CSDN内容合伙人、技术专家,从零开始做日活千万级APP。专注于分享各领域原创系列文章,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。目录一、导读二、概览三、使用四、原理五、存在的问题六、优化6.1DataStore6.2MMKV6.3sp优化七、推荐阅读一、导读我们继续总结学习Java基础知识,温故知新。二、概览SharedPreferences是Android平台上用于存储轻量级键值对数据的一种机制。它提供了一种简单的方式来保存和获取应用程序的数据。SharedPreferences存储的数据是基于键值对的,每个存储项都有一个唯一的键和对应的值。可以通过键来