Android应用ANR检测工具BlockCanary试用小记
2016-08-21 01:07
302 查看
1. 关于BlockCanary的介绍,可以参考如下链接:
作者博客:http://blog.zhaiyifan.cn/2016/01/16/BlockCanaryTransparentPerformanceMonitor/
Git地址:https://github.com/markzhai/AndroidPerformanceMonitor/blob/master/README_CN.md
2. 接下来主要是记录一下整个试用的过程:
2.1 首先创建一个新的Android工程,具体功能为添加一个按钮,点击后,让线程休眠,模拟一个ANR现象,代码如下:
2.6 现在就已经将BlockCanary集成到应用里面了,接下来,编译安装到手机上,点击测试按钮,将产生一个anr,效果如图:
3. 总结
整个配置过程还是比较简单,日志里面的堆栈信息也很清晰明了,可以很快定位到具体的产生anr的代码,相对于获取anr目录下面的trace文件,进行分析的方式,更加的实时和方便. 另外关于block时间阀值的设置,
public int getConfigBlockThreshold() {
return 5000;
}
由于不同设备的性能不一样也有所不同;一般来说,以下两种情况,容易产生ANR现象:
1. 用户操作在5秒内都没有任何响应;
2. 一个广播接收器(BroadcastReceiver)在10秒内都没有结束运行。
作者博客:http://blog.zhaiyifan.cn/2016/01/16/BlockCanaryTransparentPerformanceMonitor/
Git地址:https://github.com/markzhai/AndroidPerformanceMonitor/blob/master/README_CN.md
2. 接下来主要是记录一下整个试用的过程:
2.1 首先创建一个新的Android工程,具体功能为添加一个按钮,点击后,让线程休眠,模拟一个ANR现象,代码如下:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button)findViewById(R.id.TestBtn); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //模拟一个长时间操作,产生ANR try { Thread.sleep(8*1000); } catch (InterruptedException e) { e.printStackTrace(); } Toast toast = Toast.makeText(getApplicationContext(),"点击完成", Toast.LENGTH_LONG); toast.show(); } }); }2.2 在Module的build.gradle添加BlockCanary依赖,如下:
dependencies { .... compile 'com.github.moduth:blockcanary-android:1.2.1' }2.3 接下来是在应用中初始化BlockCannary,新建一个类继承Application类,代码如下:
public class DemoApplication extends Application { @Override public void onCreate() { super.onCreate(); // 在主进程初始化调用哈 BlockCanary.install(this, new AppBlockCanaryContext()).start(); } }2.4 实现自己的监控上下文,代码如下:
public class AppBlockCanaryContext extends BlockCanaryContext { // override to provide context like app qualifier, uid, network type, block threshold, log save path // this is default block threshold, you can set it by phone's performance @Override public int getConfigBlockThreshold() { return 5000; } // if set true, notification will be shown, else only write log file @Override public boolean isNeedDisplay() { return BuildConfig.DEBUG; } // path to save log file @Override public String getLogPath() { return "/mnt/sdcard/"; } }2.5 在AndroidManifest.xml文件中声明Application,如图:
2.6 现在就已经将BlockCanary集成到应用里面了,接下来,编译安装到手机上,点击测试按钮,将产生一个anr,效果如图:
3. 总结
整个配置过程还是比较简单,日志里面的堆栈信息也很清晰明了,可以很快定位到具体的产生anr的代码,相对于获取anr目录下面的trace文件,进行分析的方式,更加的实时和方便. 另外关于block时间阀值的设置,
public int getConfigBlockThreshold() {
return 5000;
}
由于不同设备的性能不一样也有所不同;一般来说,以下两种情况,容易产生ANR现象:
1. 用户操作在5秒内都没有任何响应;
2. 一个广播接收器(BroadcastReceiver)在10秒内都没有结束运行。
相关文章推荐
- 值得推荐的Android应用性能检测工具列表(转)
- Android 检测应用中的UI卡顿的工具
- Android应用性能检测工具-TraceView
- 值得推荐的Android应用性能检测工具列表
- android安全检测工具,梆梆安全 - 防止反编译|APP安全加固|应用加固|盗版监测
- android应用检测anr的方法
- Android应用性能检测工具-TraceView
- 值得推荐的Android应用性能检测工具列表
- 值得推荐的Android应用性能检测工具列表(转)
- 国内几大Android应用市场试用小记——开发者篇
- 值得推荐的Android应用性能检测工具列表
- 闹钟实例与远程机制AIDL工具android:process=":remote"结合应用
- Android -- 应用自动检测更新代码
- 自制的android多渠道应用打包工具--RyApkTool(2)
- 自制的android多渠道应用打包工具--RyApkTool(1)
- bootchart工具在Android系统开机测量中的应用
- Android ANR与自动化测试工具Monkey
- Android应用开发提高篇(6)-----FaceDetector(人脸检测)
- MIT推出Android应用开发工具App Inventor
- 20岁印度工程师谈HTML5、CSS3开发Android和iOS应用--各语言开发安卓工具