首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何分析ANR问题

在明确了这个时间点,才能根据不同ANR的类型分析在超时时间段内系统和应用什么异常信息。...如果ANR发生时输出的debug信息较多,或者当时的CPU或I/O资源比较紧张,“ANR in”可能在ANR发生的第一时间点之后10秒甚至20秒才被输出。...这部分log中的信息主要有: 1、 ANR进程名称与PID:进程名和PID是找到发生ANR的应用的主要依据,但是两种例外情况。...在应用程序容易出现性能问题的关键点适度添加log,对查找ANR问题非常有帮助。 3、 是否多个应用都打出相同的异常信息:有时一些ANR问题是由共同的底层问题导致的。...在掌握了以上窗口生命周期log,就可以从event.log中分析究竟是哪一个过程慢导致ANR发生,见下例。

2K30

安卓应用无响应,你真的了解吗?

取决于该应用发生ANR时对用户是否可感知,比如拥有当前前台可见的activity的进程,或者拥有前台通知的fg-service的进程,这些是用户可感知的场景,发生ANR对用户体验影响比较大,故需要弹框让用户决定是否退出还是等待...ANR爆炸现场 对于service、broadcast、provider、input发生ANR,中控系统会马上去抓取现场的信息,用于调试分析。...对于ANR问题发生的蛛丝马迹(trace)在traces.txt和dropbox目录中保存记录。...了现场信息,可以调试分析,先定位发生ANR时间点,然后查看trace信息,接着分析是否耗时的message、binder调用,锁的竞争,CPU资源的抢占,以及结合具体场景的上下文来分析,调试手段就需要针对前面说到的...发生ANR时从trace来看主线程却处于空闲状态或者停留在非耗时代码的原因哪些?

2.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

嘘,我已经瞒着开发解锁APP日志文件抓取及分析啦!

打开方式: (前提:已增加JAVA环境变量及androidsdk环境变量) 1.双击\android-sdk windows\tools (部分可能在platform-tools )目录下ddms.bat...; 2.打开cmd,输入monkey -p com.xx.xxx -v 1000 ,当monkey异常中断(即应用程序崩溃或接收到异常、应用程序产生应用程序不响应( ANR )异常两种异常); 3....查看异常日志是否与所测的APP相关,如相关则保存异常输入的日志信息即可; 使用示例: ?...logcat -v time >本地文件中 直接拉取dropbox目录中的data_app_crash开头的文件 (2)如果发生的无响应(ANR): 发生单次ANR: adb logcat -v time...获取logcat,拉取/data/anr/traces.txt 发生多次ANR: 拉取dropbox目录中的data_app_anr开头的文件 跑monkey压力稳定性测试,记得清空dropbox里面的相关的异常文件信息哦

2.2K20

Bugly即将支持的ANR,精神哥告诉你是个什么鬼?

具体说,在以下情况发生时,会发生ANR可能在不同ROM 中时间有所更改): 用户的输入在5s内没被App响应; BroadcastReceiver的onReceiver()超过10s; Service...对于我们手机上最常见的触摸操作,0.1s的响应延迟已经很明显的卡顿感了。而对于常见的ANR,用户至少要等5s以上! 发生ANR,往往会弹出对话框,问用户是继续等待还是直接关掉: ?...一般来说,界面相对越不“流畅”的App(说明UI线程耗时操作多)越容易发生ANR(一个输入事件在某个设备A上4秒了反馈,并不意味着它在其他设备B上是安全的)。ANR其实就是界面卡顿的极端情况。...ANR,进程号18617; ANR原因:用户输入超时; ANR发生前、后一段时间分别附在情况:在ANR发生前后,CPU90+%耗费在这个demo上,说明很可能是这个demo自身性能引起的。...这些方案大家应该都知道,不过仍难免大量的ANR是写代码时忽略了,在测试时没发生,最终在用户的手机上出现的。

2.6K40

android学习笔记----ANR

应用程序的响应能力可能发生的最糟糕的事情是“应用程序无响应”(ANR)对话框。...设计应用程序的响应性至关重要,因此系统永远不会向用户显示ANR对话框。 本文档描述了Android系统如何确定应用程序是否没有响应,并提供了确保应用程序保持响应的指南。 什么触发ANR?...当Android检测到以下某种情况时,它将显示特定应用程序的ANR对话框: 在5秒内无响应输入事件(如按键或屏幕触摸事件)。 一个 BroadcastReceiver 尚未在10秒内完成执行。...另一个共同的问题是BroadcastReceiver对象执行过频繁时发生。频繁的后台执行可以减少其他应用程序可用的内存量。...提示: 您可以使用 StrictMode 帮助查找可能长时间运行的操作,例如您可能在主线程上意外执行的网络或数据库操作。 加强响应能力 通常,100到200ms是用户将感知应用程序缓慢的阈值。

52600

如何用 Android vitals 解决应用程序的质量问题

应用程序无响应(ANR)事件。这些事件发生在你的应用程序 UI 冻结的时候。发生冻结时,如果你的应用位于前台,会弹出对话框让用户选择关闭应用或等待响应。从用户的角度来看,这种行为与应用崩溃一样糟糕。...了解你的应用是否在驱动过多的唤醒是 Android vitals 的重要任务。收集的有关你应用行为的匿名数据用于显示自设备完全充电,每小时经历超过 10 次唤醒的用户的百分比。...唤醒警报是否其他替代方法?...界面保持冻结几秒钟,会显示一个对话框,让用户选择等待或强制应用程序退出。 从应用程序开发的角度来看,当应用程序因为执行耗时操作(如磁盘或网络读写)阻塞主线程时,就会发生 ANR。...我如何检测 ANR 的原因? 查找 ANR 的原因可能会非常棘手,就拿 URL 类来说吧。 你觉得确定两个 URL 是否相同的 URL#equals 方法是否会被阻塞?

2.2K10

Android之ANR报错

image.png ANR ANR(Application Not Responding )应用无响应的简称,是为了在 APP卡死时,用户 可以强制退出APP的选择,从而避免卡机无响应问题,这是Android...ANR(Application Not Responding ),则是Android的一种自我保护措施,当主线程出现卡顿时候,Android 系统会给用户一个弹出提示,让用户手动选择继续等待还是强制关闭此...当Android检测到以下情况之一时,Android将显示特定应用程序的ANR对话框,比如以下三种情况下ANR将经常发生: UI Thread超过 5 s没有响应 Broadcast广播超过10 s没响应...Service 服务超过 20s 没响应 因此,为避免ANR发生,请不要在主线程中进行耗时操作,耗时操作请尽量在子线程中运行。

1.1K10

手把手教你高效监控ANR

image.png 我们知道ANR流程基本都是在system_server系统进程完成的,系统进程的行为我们很难监控和改变,想要监控ANR就必须找到系统进程跟我们自己的应用进程是否交互,如果有,两者交互的边界在哪里...onlyDumpSelf) { 发生ANR,为了能让开发者知道ANR的原因,方便定位问题,会dump很多信息到ANR Trace文件里,上面的逻辑就是选择需要dump的进程。...dump的timeout时间)不断轮询自己是否NOT_RESPONDING对flag,一旦发现有这个flag,那么马上就可以认定发生了一次ANR。...所以我们需要一种方法,在收到SIGQUIT信号,能够非常快速的侦查出自己是不是已处于ANR的状态,进行快速的dump和上报。很容易想到,我们可以通过主线程是否处于卡顿状态来判断。...ANR: private static boolean isMainThreadStuck(){ 我们通过上面几种机制来综合判断收到SIGQUIT信号是否真的发生了一次ANR,最大程度地减少误报和漏报

55110

Android开发:不会ANR?这里ANR解析和案例!

因为问题就会有解决办法,解决不了,只是因为没有用对方法 导出ANR日志信息,根据日志信息,判断确认发生ANR的包名类名,进程号,发生时间,导致ANR原因类型等。...结合应用日志,代码或源码等,分析ANR问题发生前,应用是否有异常,其中具体问题具体分析。...发生前的CPU的使用情况 later表示ANR发生的CPU的使用情况 重点关注xxx%TOTAL: xxx% user + xxx% kernel + xxx% iowait,可通过这几项了解到CPU...traces文件中详细记录了发生ANR前后该进程的各个线程的Stack,一般从主线程的stack入手分析,查看分析ANR问题发生前,应用是否有异常。...由此分析,我们接下来尝试使用“找到ANR问题发生之前,应用是否有异常发生”的思路,继续分析。 我们先找到申请锁动作开始时间点,由阻塞动作开始时间点往前分析,寻找异常信息。

1.3K40

ANR 原理与实战技巧

(算法的质量,以及当列表数目激增是否能快速算完,是个耗时操作,会产生anr) bitmap的运算,(旋转,特效处理等) ThreadPoolExecutor 线程池,当我们从这里获取一个线程时候,如果此时所有线程都被使用...栈的时间信息处,是否发生anr,如果有,此份 log有效,可以进行分析。...(搜索下栈里面是否 block) 关于 app 出现的 anr,不能只看栈调用了系统方法,就转出给 frm,应该拿到手里,先做一些判断。 ● 判断 cpu 的使用情况,主要关注前三四个即可。...负载一般,正常,那么就要去看下是否写的代码处会产生挂起等待,导致 anr ● 关注 log 信息,在发生 anr 的前一分钟内,看下系统在忙于哪些事情。...,在write文件中,导致了cpu饥饿,发生anr

1.8K71

Android卡顿优化 | ANR分析与实战(附ANR-WatchDog源码分析及实战、与AndroidPerformanceMonitor的区别)

本文要点 ANR概述 发生ANRAndroid系统的执行流程 ANR-WatchDog原理与实战 ANR的传统解决套路 ANR模拟实战 线上ANR监控方案【ANR-WatchDog原理分析】 ANR-WatchDog...ANRAndroid系统的执行流程 APP发生ANR 进程接收异常终止信号,开始写入进程ANR信息(当时场景,包含当前线程所有堆栈信息、CPU/IO的使用情况等); 弹出ANR提示框,提示用户关闭APP...导出上面提到的ANR现场信息文件; 导出来,便可对文件内容进行详细分析:从CPU、IO、锁冲突等原因思考; ANR模拟实战 模拟ANR原因:锁冲突; 更改代码: ?...线下套路其实就是在APP发生ANR时, 导出信息文件, 查看文件,结合代码进行分析; 线上ANR监控方案 通过FileOberver监控上述的ANR信息文件的变化, 如果这个文件发生了变化,那就说明发生了...由此根据_tick的值可以判断_ticker是否被处理了; _tick重新归零则主线程处理了_ticker, _tick不为零则判定主线程卡顿,它没处理_tick!!!!!!!!

4.9K42

Android ANR分析(trace文件的产生流程)

dump trace的信号 1.当一些带有超时机制的系统消息(如:Service的创建)判定超时,会调用系统服务AMS接口,收集ANR相关信息并存档(data/anr/trace, data/system...已经被系统kill 4.系统是否正在关机等情况),如果都不符合,则认为当前进程发生anr。...3.接下来系统在判断当前ANR进程对用户是否可感知,然后开始统计与该进程由关联的进程,或者一些系统核心服务进程的信息(例如与应用交互的SurfaceFligner,System Server等系统进程)...首先会弹出一个ANR的对话框,然后向UI线程发送SHOW_NOT_RESPONDING_MSG消息 5.当UI线程收到该消息,会调用dumpStackTraces函数: 最重要的一点:向目标进程发送...在5.0之后采用的是checkPoint进行dump信息) 发生ANR时,systemServer进程会执行dumpStackTraces函数,在该函数中发SIGQUIT信号给对应的进程(上面有分析到)

1.6K30

微信Android客户端的ANR监控方案

我们知道ANR流程基本都是在system_server系统进程完成的,系统进程的行为我们很难监控和改变,想要监控ANR就必须找到系统进程跟我们自己的应用进程是否交互,如果有,两者交互的边界在哪里,边界上应用一端的行为...ANR Trace文件是包含许多进程的Trace信息的,因为产生ANR的原因可能是其他的进程抢占了太多资源,或者IPC到其他进程(尤其是系统进程)的时候卡住导致的。...我们在20秒内(20秒是ANR dump的timeout时间)不断轮询自己是否NOT_RESPONDING对flag,一旦发现有这个flag,那么马上就可以认定发生了一次ANR。...所以我们需要一种方法,在收到SIGQUIT信号,能够非常快速的侦查出自己是不是已处于ANR的状态,进行快速的dump和上报。很容易想到,我们可以通过主线程是否处于卡顿状态来判断。...是否真的发生了一次ANR,最大程度地减少误报和漏报,才是一个比较完善的监控方案。

4.5K62

ANR问题的定位与分析

在10S内没有处理完成发生ANR。...ANR定位与分析】 1. ANR分析思路——traces 通常发生ANR时,首先去查找对应Trace(重要进程的各个线程调用栈trace信息)日志,看看主线程是否在处理该广播或被阻塞。...分析kernel思路 在此类日志中直接搜索lowmemorykiller,如果存在则查看发生时间和ANR时间是否大致对应,相差无几的话,可以从该日志中看到操作系统层面当前内存情况,Free Memory...说明的是空闲物理内存,File Free说明的则是文件Cache,也就是应用或系统从硬盘读取文件,使用结束,kernel并没有这正释放这类内存,加以缓存,目的是为了下次读写过程加快速度。...分析cpuinfo思路 这类日志,可以清晰的看到哪类进程CPU偏高,如果存在明显偏高进程,那么ANR和此进程抢占CPU一定关系。

3.3K30

Android ANR分析(trace文件的产生流程)

首先收集需要dump trace的进程并给对应进程发送dump trace的信号 1.当一些带有超时机制的系统消息(如:Service的创建)判定超时,会调用系统服务AMS接口,收集ANR相关信息并存档...(data/anr/trace, data/system/dropbox) 2.进入到AMS中,AppError会先进行筛选 1.当前进程正在进行dump流程 2.已经发生crash 3...已经被系统kill 4.系统是否正在关机等情况 如果都不符合,则认为当前进程发生anr。...3.接下来系统在判断当前ANR进程对用户是否可感知,然后开始统计与该进程由关联的进程,或者一些系统核心服务进程的信息(例如与应用交互的SurfaceFligner,System Server等系统进程)...在5.0之后采用的是checkPoint进行dump信息 发生ANR时,systemServer进程会执行dumpStackTraces函数,在该函数中发SIGQUIT信号给对应的进程(上面有分析到)

97340

Android ANR问题解析(一)

可惜在实际操作中,某些情况下发生ANR时,被报出ANR的应用并不是真正发生ANR的应用。...比如在上述流程中,步骤3中应用B的进程创建完成,但是由于原生Bug导致焦点应用没有转换,超时同样会报出A发生ANR。...因此在分析窗口获取焦点超时的ANR时,一定要注意分析当前焦点应用和焦点窗口是否一致,首先要明确ANR的真正应用是哪一个,后续的分析才会有价值。 窗口获取焦点超时通常由以下原因导致。...如果一个应用恰好在开始执行OnReceive方法时被LMK杀死,那么在60秒BoardcastQueue检查广播处理情况时此应用就一定会发生ANR。...当主线程在执行ContentProvider相关操作时没有在规定的时间内执行完毕就会发生ANR。由程序开发者自行设置是否启用以及超时时间。

2.3K10
领券