一个有趣的安卓软件异常统计

统计背景:

为提高编码质量,把软件开发过程中出现的bug提交上个人网站,年度终结,给它做个统计。

统计项目:1个上线项目,3个开发中项目,1个私人项目

项目开发人员:作者本人、同行5人

项目主题:电商、系统应用

信息收集日期:2014-08-13 20:37:54(捕获第一个异常)到2015-01-10 00:19:36(统计时最后一个异常提交时间)

异常信息数量:3192个

数据库收集到的异常信息:

异常信息统计sql:

SELECT
(SELECT count(Id) From t_apperror WHERE Context LIKE '%Exception:CannotperformthisactionafteronSaveInstanceState%')
/
(SELECT count(ID) From t_apperror) as 'Framage隐藏失败' /** 0.0047 **/

SELECT
(SELECT count(Id) From t_apperror WHERE Context LIKE '%Exception:syntaxerror%')
/
(SELECT count(ID) From t_apperror) as 'syntaxerror' /** 0.0119 **/

SELECT
(SELECT count(Id) From t_apperror WHERE Context LIKE '%Stringcannotbecastto%')
/
(SELECT count(ID) From t_apperror) as 'string转型错误(大多数转向json)' /** 0.0103 **/

SELECT
(SELECT count(Id) From t_apperror WHERE Context LIKE 'Exception:Invalidint%')
/
(SELECT count(ID) From t_apperror) as 'json解析错误' /** 0.0229 **/

SELECT
(SELECT count(Id) From t_apperror WHERE Context LIKE '%Exception:null_%')
/
(SELECT count(ID) From t_apperror)
 + (SELECT count(Id) From t_apperror WHERE Context LIKE '%Exception:java.lang.NullPointer%')
/
(SELECT count(ID) From t_apperror)
as "空指针" /** 0.3932 **/

SELECT
(SELECT count(ID) From t_apperror WHERE Context LIKE 'Exception:Fragmentalreadyadded%')
/
(SELECT count(ID) From t_apperror) as 'Exception:Fragmentalreadyadded'  /** 0.0063 **/

SELECT
(SELECT count(ID) From t_apperror WHERE Context LIKE 'Exception:Unabletoaddwindow%')
/
(SELECT count(ID) From t_apperror)
as 'Exception:Unabletoaddwindow' /** 0.1263 **/

SELECT
(SELECT count(ID) From t_apperror WHERE Context LIKE 'Exception:Unabletodestroyactivity%')
/
(SELECT count(ID) From t_apperror) as 'Unabletodestroyactivity'  /** 0.0276 **/

SELECT
(SELECT count(ID) From t_apperror WHERE Context LIKE 'Exception:BinaryXMLfile%')
/
(SELECT count(ID) From t_apperror) as 'xml布局错误' /** 0.0053 **/

SELECT
(SELECT count(ID) From t_apperror WHERE Context LIKE 'Exception:Invalidindex%')
/
(SELECT count(ID) From t_apperror) as "超出索引" /** 0.0103 **/

统计结果:

统计结论:

1.空指针错误是最常见的。

2.编译器会犯傻,binaryxml和syntaxerror错误都会出现。

3.编码上 fragment错误比较多,可能是编码人员对 fragment不够了解构成的。

以上统计不太全面,仅供参考。

时间: 2024-10-10 06:05:29

一个有趣的安卓软件异常统计的相关文章

Android中一个有趣的crash的日志分析

很久前写的一篇文章,发出来以作纪念:) Android中一个有趣的crash的日志分析 首先看看bugly平台中异常的统计信息,表面上是一个NullPointerException: 发生异常设备统计信息如下图,有意思的是全部都是root过的机器: 接下来看跟踪日志,在最下面可以看到这样的日志,抛出了NullpointerException: 引起异常的是com.lishu.net.LishuNet$2类,从类名看显然是某一个类的内部类. 第一个反应,当然是搜索一下应用的源代码,看看是不是有co

关于java除法的一个有趣例子。

今天逛贴吧的时候偶然发现吧友的一个有趣例子. public class Demo{     public static void main(String[]args){         System.out.println(24/0);  //会抛byzero异常         System.out.println(24.0/0.0) //可以输出,输出为Infinity:     } } 目前对于第二句为什么不会报byzero异常也不知道.先做个标记.理解了再补充上.

浅谈安卓软件如何实现企业盈利

谷歌系统的开源性不仅提供了一个免费的平台,而且也让很多第三方Android应用程序商店加入其中.这其中还包括了亚马逊Android商店.与此同时,各大Android手机厂商以及运营商也纷纷开设了自己的安卓应用商店.这种情况在iOS,Symbian,乃至Windows Phone 7中是不存在的.在你争我夺的价格战背后,一系列新的疑问也随之而来.Android第三方应用商店真的能盈利吗?通过何种方式盈利?用户最关注的安全性又如何保障?借助谷歌庞大的广告网络,Android第三方应用最终会如何发展?

精品软件 推荐 流量报表软件 networx 统计电脑网络用的流量 用手机流量卡的特别有用

介绍一个免费的软件,可以统计电脑每一个网卡的使用流量情况, 用手机流量卡的特别实用 下载地址也可以如下,或者百度中找到:http://www.400gb.com/file/116129429 精品软件 推荐 流量报表软件 networx  统计电脑网络用的流量 用手机流量卡的特别有用

一个由进程内存布局异常引起的问题

一个由进程内存布局异常引起的问题 前段时间业务反映某类服务器上更新了 bash 之后,ssh 连上去偶发登陆失败,客户端吐出错误信息如下所示:图 - 0 该版本 bash 为部门这边所定制,但实现上并没有改动原有逻辑,只是加入了些监控功能,那么这些错误从哪里来呢? 是 bash 的锅吗 从上面的错误信息可以猜测,异常是 bash 在启动过程中分配内存失败所导致,看起来像是某些情况下该进程错误地进行了大量内存分配,最后导致内存不足,要确认这个事情比较简单,动态内存分配到系统调用这一层上主要就两种方

第24章 SEH结构化异常处理—异常处理及软件异常

24.1  程序的结构 (1)try/except框架 __try{ //被保护的代码块 …… } __except(except fileter/*异常过滤程序*/){ //异常处理程序 } (2)说明 ①当__try块中的代码发生异常时,__except()中的过滤程序就被调用. ②过滤程序可以是一个简单的表达式或一个函数(返回值应为EXCEPTION_CONTINUE_SEARCH.EXCEPT_CONTINUE_EXECUTE或EXCEPT_EXECUTE_HANDLER之一) ③过滤表

Genymotion - 强大好用高性能的 Android 模拟器 (在电脑流畅运行APK安卓软件游戏的利器)

随着 Android 系统的应用和游戏越来越丰富,甚至有些比起Windows.Mac上的软件更加好用好玩,因此很多人都希望能在电脑上也能玩到安卓的游戏或APP. 我们曾推荐过 BlueStacks,而 Genymotion 则是另一款更加优秀专业高性能的安卓 Android 模拟器!它支持 Windows.Mac.Linux,由于其模拟运行速度很快画面流畅.且支持 OpenGL 3D 加速.多开.全屏等特性,并提供 Eclipse.IntelliJ IDEA 的开发插件,不仅是开发者们也是普通玩

解决安卓TextView异常换行,参差不齐等问题

Pull 解析器简介 Pull 解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如: 开始元素和结束元素事件,使用xmlPullParser.next() 可以进入下一个元素并触发相应事件.跟 SAX 不同的 是, Pull 解析器产生的事件是一个数字,而非方法,因此可以使用一个 switch 对事件进行处理.当元素开始解析时,调用 parser.nextText() 方法可以获取下一个 Text 类型节点的值. Pull解析器的源码及文档下载网址:http://www.xmlpul

关于CacheLookup一个有趣的问题

今天写一个与其他系统进行物料同步的接口,通过COM Business Connector调用Axapta3.0的方法将数据插入到物料表中,中间发生异常,事务回滚,再次调用的时候提示刚刚发生异常的物料已经存在了,但是查看InventTable表却又看不到这条记录,用select查询却可以查询到这条记录. 应该是物料缓存导致的,重启AOS异常消失. InventTable表的CacheLookup属性为Found,只要在数据库中查询到的记录就缓存到AOS中,下次查询只要AOS中存在就不再查询数据库,