问:ANR怎么分析?
ANR问题,这其实是一个非常综合性的问题,因为anr会涉及CPU负载,内存空间大小,线程锁,GC回收,这里面每个点,都是非常考验我们基本功的。
分析ANR问题,需要综合上述所有信息,抽丝剥茧,一步一步找原因,看看到底是什么原因导致ANR?
一般anr是怎么产生的呢?有以下几点会产生anr
1、主线程有耗时操作,在规定时间内没有完成任务,被ams或者wms检测到超时,则提示anr ==这就是CPU问题
2、主线程被block,主线程执行任务,但是资源被锁了,这就涉及线程锁
3、系统或进程内存不够,由于内存不足,所以需要频繁gc,或者lmk,导致任务无法完成,这涉及gc,内存
4、CPU资源被抢占。由于线程优先级太低,一直抢不到CPU资源,导致任务一直无法被执行,最后anr
总之一句话,就是相关任务没有按时完成,没有完成的理由很多,到最后都会被系统考核,发anr警告。
分析anr常用关键字
anr_in
low_memory
slow_operation
基于上述观点,分析anr问题,那就认真看对应日志,
从anr进程的主线程栈信息开始,先看当时发生anr问题是,主线程处于什么状态,
然后对比CPU信息,查看当前CPU负载,
查看内存信息,分析内存使用情况,综合代码业务,判断是属于上面那种情况?
对症下药,如果太耗时,也使用多线程方案,如果被锁了,也解锁,如果内存不够,也优化内存。
真相只有一个,认真分析,一定可以找到真正原因。