如何避免Android运行时崩溃,保证程序高可用性一

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继承而来的,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、华为表现良好

app的崩溃率标准,优秀,合格,轻微隐患,严重隐患

5.线程如何处理一个未捕获异常导致的线程中断

5.1Thread定义了UncaughtExce

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值