1.Crash是什么?
Crash,即闪退,多指在移动设备(如IOS、Android设备)中,在打开应用程序时出现突然退出中断的情况(类似于Windows的应用程序崩溃)。
2.什么引起Crash?
异常可以简单分为Checked异常及Unchecked异常,那么这两种异常的区别是什么呢?其中派生于Error或者RuntimeException异常称为Unchecked异常,所有其他的Exception称为Checked异常。
那么为什么要这样区分他们呢?因为Java compiler(编译器)强制要求所有的Exception要么被catch,要么被throw对其进行处理,否则编译会不通过,除非这是一个RuntimeException(e instanceof RuntimeException)。也就是说,通常的Exception一定要被处理,也即我们所说的Checked Exception,而RuntimeException/Error,编译器是不强制要求处理的,所以被称为UnChecked exception。
RuntimeException(运行时异常),它属于Unchecked异常。如果出现RuntimeException,那么一定是程序员代码的问题,编译器并不会检查Unchecked异常。在开发过程中,我们遇到的crash绝大多数都属于RuntimeException(RuntimeException是引起Crash主要原因);
3.异常分类分哪些种?
Java层
从上图可以看出,他们都是从Throwable继承而来的,Throwable下层分为两个子类:Error和Exception。
3.1关于Error和Exception
其中Error类描述了Java运行时系统的内部错误或设备资源耗尽的错误。 这种错误一般没有别的解决办法,它用于报告给开发者程序无法恢复的异常情况。对于所有Error类型以及其子类都不要求程序进行处理,常见如栈溢出StackOverflowError等。
而Exception类则是值程序有可能恢复的异常情况,Exception包含了运行时异常(Runtime Exception)和受检查的异常(Checked Exception);
3.2关于Checked和Unchecked异常
上面一小节提到了Checked异常及Unchecked异常,那么这种异常的区别是什么呢?其中派生于Error或者RuntimeException的异常称为Unchecked异常,所有其他的Exception称为Checked异常。在上图所示中,浅蓝色方框所标注的为Unchecked异常。
那么为什么要这样区分他们呢?因为Java compiler(编译器)强制要求所有的Exception要么被catch,要么被throw对其进行处理,否则编译会不通过,除非这是一个RuntimeException(e instanceof RuntimeException)。也就是说,通常的Exception一定要被处理,也即我们所说的Checked Exception,而RuntimeException/Error,编译器是不强制要求处理的,所以被称为UnChecked exception。
3.3关于RuntimeException
Oracle 官网解释:
RuntimeException and its subclasses are unchecked exceptions. Unchecked exceptions do not need to be declared in a method or constructor’s throws clause if they can be thrown by the execution of the method or constructor and propagate outside the method or constructor boundary.
RuntimeException(运行时异常),它属于Unchecked异常。如果出现RuntimeException,那么一定是程序员代码的问题,编译器并不会检查Unchecked异常。在开发过程中,我们遇到的crash绝大多数都属于RuntimeException(RuntimeException是引起Crash主要原因);
4.Crash崩溃率的统计
影响用户体验因素:
App的应用性能稳定是良好用户体验中非常关键的一环,而现实情况却是应用崩溃、卡顿、加载缓慢、页面白屏等问题,频频出现在用户的真实体验之中,成为影响业务表现的直接杀手。为此,应用性能管理(APM)正在国内外蓬勃发展,被越来越多的企业所认可。
友盟崩溃率统计:
友盟+U-APM数据白皮书显示:APP 整体崩溃率为0.293%,其中Android 端崩溃率为0.32%, iOS 端崩溃率为0.1%,头部移动应用在治理崩溃表现方面表现更为优异,更加注重在应用质量治理方面的精细打磨。
参考:
移动应用性能体验报告-Android崩溃率达0.32%,OV、华为表现良好