ANR Bug分析

ANR即Application Not Responding,顾名思义就是应用程序无响应。在Android中,一般情况下,四大组件均是工作在主线程中的,Android中的Activity Manager和Window Manager会随时监控应用程序的响应情况,如果因为一些耗时操作(网络请求或者IO操作)造成主线程阻塞一定时间(例如造成5s内不能响应用户事件或者BroadcastReceiver的onReceive方法执行时间超过10s),那么系统就会显示ANR对话框提示用户对应的应用处于无响应状态。

简单总结就是:

  • 不要让主线程干耗时的工作
  • 不要让其他线程阻塞主线程的执行

下面记录ANR bug分析过程:

一、
1、Application is not responding时机:

这里写图片描述

2、先看下是否是GC引起,搜索dalvikvm-heap,看下ANR前后GC情况

这里写图片描述

3、看下trace文件

这里写图片描述

4、查看cpuinfo

这里写图片描述

5、看下这两个线程分别在做什么事情
111115
这里写图片描述
111116
这里写图片描述

分析:发生ANR之前CPU占用不高,trace显示卡在startActivityForResult,该方法为系统方法不会出现耗时长的问题;主要原因是GC,ANR之前主要的内存分配在11115和11116线程

解决:加载图时,初始进入只加载首屏,不再全部加载。

二、
1、Application is not responding时机:

这里写图片描述

2、

这里写图片描述

3、trace文件

这里写图片描述

初步定位是某一个控件卡住了主线程

4、回到log中

找到该控件在ANR之前,在执行什么操作?确认是执行动画时卡住。

分析:发生ANR之前CPU占用不高,trace显示卡在某一个控件,调用startAnim;主要原因是GC引起。

解决:对于部分rom上,做限定动画,只限示静态图。

三、
1、Application is not responding时机:
这里写图片描述

2、
这里写图片描述

3、
这里写图片描述

4、
这里写图片描述

5、
这里写图片描述

6、
这里写图片描述

7、
这里写图片描述

8、
这里写图片描述

分析:从logcat看,ANR前出现两次大的时间跳变,均在7秒左右,跳变期便主要是播放器的xxx;
内存占用并不是很高,CPU占用率偏高,尤其是在UI跳变的时段,主要是播放器的IO占用CPU较高;从cpuinfo看占用最高的都是mediaserver的线程,解码时IO比较大,加上设备性能差,导致用率偏高,IO受阻。发生ANR。

解决:考虑到竞品也是一样的表现,受限于设备本身性能,导致解码时出现问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值