Android Bug收集解决方案分析
2017-12-05 19:40
239 查看
Android Bug收集解决方案分析
一.概述
本文主要介绍Android平台下bug类型和产生原因、崩溃捕获和收集解决方案、以及bugly的使用方法。Android平台下bug类型主要有Crash、ANR、卡顿、服务器异常等。要实现Android Bug捕获和收集的困难主要有这么几个:1、如何捕获崩溃;2、如何获取堆栈信息;3、将错误日志上传到指定服务器。采用腾讯bugly的错误日志功能能捕获应用Java Crash、C/C++ Native Crash 、 ANR和卡顿,能够满足日常需求,且不需要额外准备接收服务器。使用bugly可以收集到已发布应用的异常,以便测试和开发人员发现和修改bug,对于提高软件质量有着极大的帮助。
二.Android 平台bug类型及产生原因分析
Android 平台bug类型主要有:Crash、ANR、卡顿、服务器异常等。
1,常见的Android Crash有两类:一类是Java Exception异常,一类是Native Signal异常。
2,ANR全称是Application Not Responding,是指应用程序未响应。
Android系统对于一些事件需要在一定的时间内完成,如果超过预定时间未响应或者响应时间过长,会造成ANR。一般这时系统会弹出一个ANR对话框,用户可自行选择继续等待或者停止当前程序运行。 那么哪些场景会造成ANR呢?
* 1)、Service Timeout:比如前台服务在20秒内未执行完成;
* 2)、BroadcastQueue Timeout:比如前台广播在在10秒内未执行完成;
* 3)、ContentProvider Timeout:内容提供者,在punlish过超时10秒;
* 4)、InputDispatching Timeout:输入事件分发超时5秒,如按键或者触摸事件;
3,卡顿:16ms原则。Android系统每隔16ms会发出VSYNC信号重绘界面(Activity)。
为什么是16ms,因为Android设定的刷新频率是60FPS(Frame Per Second),也就是每秒60帧的刷新率,约合16ms刷新一次。 这就意味着,我们需要在16ms内完成下一次刷新的界面相关运算,以便界面更新。
哪些情况会导致卡顿?
* 1)、过于复杂的布局(使用Hierarchy Viewer工具分析,Hierarchy Viewer 不仅可以以图形化树状结构的形式展示出UI层级,还对每个节点给出三个小圆点,以指示该元素Measure,Layout,Draw的耗时及性能);
* 2)、过度绘制(OverDraw),理想情况下,每屏每帧上,每个像素点应该只被绘制一次,如果有多次绘制,就是OverDraw,过度绘制了。
4,服务器异常:使用Fiddler抓包工具。
Fiddler是位于客户端和服务端的HTTP代理。它能够记录客户端的服务器之间的所有HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的参数,甚至可以修改服务器返回的数据,功能非常强大。
引申——Android适配问题引起的bug
1),屏幕适配:分辨率、尺寸等。2),机型适配:2015年统计1294家厂商生产出682000款Android手机。
3),Android版本适配:比如说,Android6.0加入运行时权限,7.0加入虚拟文件对相机拍照和选择图片有影响。
三.崩溃捕获原理
系统的默认处理 很抱歉,”营销管家”已停止运行。
1),Java崩溃捕获方式
首先注册异常处理Thread
setDefaultUncaughtExceptionHandler(Tread.UncaughtExceptionHandler);
线程一旦崩溃,异常处理器的Thread.UncaughtExceptionHandler.uncaughtException(Thread t,Throwable e)方法被调用;最后在uncaughtException方法中实现Java异常的捕获及上报。
2),Native崩溃捕获方式
四.移动端常用的bug收集方案
1) 友盟 优点:Android和iOS可用,统计功能突出,能捕获应用层Crash;
缺点:bug收集不及时。
2) Bugly
优点:Android和iOS可用,bug收集及时,能捕获应用Java Crash、C/C++ Native Crash 、 ANR和卡顿并提供相应的bug修复建议,对bug进行了合并统计;
缺点:bugly收集的信息较多。
3) Bugtags
优点:一套完善的bug管理系统,Android和iOS可用,Bugtags 提供了远程配置功能,可以在 APP 不发版的情况下,在线控制 APP 的行为或者外观。
缺点:不能捕获 ANR和卡顿问题。
3) DIY(自己搭建bug收集平台)
优点:可以根据自己的业务需求实现,不依赖第三方平台;
缺点:需要编写错误收集代码,需要搭建错误日志收集服务器。
五.使用Bugly
* 1),看懂bugly 的java 栈
2),看懂Bugly的Native栈
六.Bugly存在误报和漏报吗?
1)不存在误报。 因为异常与否是由系统API直接回调,不存在Bugly误判的空间。
2)存在漏报。
没来的及处理,比如说虚拟机崩溃,直接dump了,虚拟机直接sigabrt ,此时调用任何jni ,程序直接退出了。
上报是在java层,第二次启动时上报上去,有可能用户卸载了,或者不再打开等。
3)对于try…catch住的异常无法上报,只能通过log记录。
七.关于移动应用Crash统计数据
八.Android常见bug及解决方案总结
参考:Android常见bug及解决方案总结.doc
九.服务器异常获取
参考:Fiddler手机抓包工具使用详解.doc
十.DIY Android和iOS平台的崩溃捕获和收集器
参考:经典好文:android和iOS平台的崩溃捕获和收集 - wx0123 - 博客园.htm
相关文章推荐
- cocos2d-x在android中响应返回键编译报错的bug分析
- Android 界面滑动卡顿分析与解决方案(入门)
- Android ListView 异步加载图片乱序问题,原因分析及解决方案
- Android大图片裁剪终极解决方案 原理分析(概念)
- Android ListView异步加载图片错位、重复、闪烁分析以及解决方案
- AndroidPn服务端部分bug解决方案
- jquery博客收集的IE6中CSS常见BUG全集及解决方案
- Android BroadcastAnyWhere(Google Bug 17356824)漏洞具体分析
- android 6.0权限全面详细分析和解决方案
- Android大图片裁剪终极解决方案(上:原理分析)
- Android大图片裁剪终极解决方案 原理分析
- 【Android游戏开发之九】(细节处理)触屏事件中的Bug解决方案以及禁止横屏和竖屏切换!
- Android-FixBug热修复框架的使用及源码分析(不发版修复bug)
- Android-Bug收集
- Android大图片裁剪终极解决方案(上:原理分析)
- cocos2d-x在android中响应返回键编译报错的bug分析
- Android ListView 卡顿问题分析与解决方案
- Android FragmentTabhost内容Fragment不显示等Bug解决方案
- android 6.0权限全面详细分析和解决方案
- Android大图片裁剪终极解决方案 原理分析