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情况

ANR Bug分析_第1张图片

3、看下trace文件

ANR Bug分析_第2张图片

4、查看cpuinfo

ANR Bug分析_第3张图片

5、看下这两个线程分别在做什么事情
111115
ANR Bug分析_第4张图片
111116
ANR Bug分析_第5张图片

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

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

二、
1、Application is not responding时机:

这里写图片描述

2、

ANR Bug分析_第6张图片

3、trace文件

ANR Bug分析_第7张图片

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

4、回到log中

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

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

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

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

2、
ANR Bug分析_第8张图片

3、
ANR Bug分析_第9张图片

4、
ANR Bug分析_第10张图片

5、
ANR Bug分析_第11张图片

6、
ANR Bug分析_第12张图片

7、
ANR Bug分析_第13张图片

8、
ANR Bug分析_第14张图片

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

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

更多相关文章

  1. Android图片加载框架Picasso最全使用教程 一
  2. Android更新Ui线程的四个方法
  3. android checkbox 未选中状态 已选中状态 替换成自己的图片
  4. Android 控件之Gallery和ImageSwitcher图片切换器
  5. Android深入浅出系列课程---Lesson12 AFF110525_Android多线程系
  6. android学习笔记之多线程学习
  7. android中使用Thumbnails批量加载sdcard中的缩略图片

随机推荐

  1. 4.28 context.getExternalFilesDir(null)
  2. Android怎么用onCreateOptionsMenu()创建
  3. Android生成签名文件并用其对apk文件进行
  4. 使用ndk开发android 5.0 平台错误处理(1)
  5. Android4.1输入子系统框架介绍和性能分析
  6. android 真机 安装 模拟器 DevTools Deve
  7. USB设备驱动程序学习笔记(一)
  8. 对热修复和插件化的理解
  9. Android中对SD卡的读取与写入
  10. Android(安卓)values资源的定义