App怎么做才能永不崩溃

你们项目中怎么处理程序崩溃?

  • 当然是try住了

那异常日志怎么收集呢?

  • 一般会手写一个工具类,然后在可能出问题的地方通过特殊的方法进行记录日志,然后找时机上传

这位同学,你是不是没有睡醒,我问的是异常日志,是你未知状态的异常,难道你要把整个项目try住?

  • 这样啊,那可以写一个CrashHandler : Thread.UncaughtExceptionHandler,在Application中注册。

然后在重写的uncaughtException(t: Thread, e: Throwable)中收集日志信息。

为什么出现异常了,程序会停止运行呢?

  • 应该是系统结束了整个程序进程吧

那出现异常了,程序一定会停止运行么?

  • 嗯...应该会.....吧

在未知异常的情况下,有办法让程序不崩溃么?

  • 嗯...应该可以吧...

好了,回去等通知吧.


以上是一段加过戏的面试场景,考察的是对异常处理,以及Handler对应原理的了解程度。 接下来我们一个一个分析问题。


try catch会影响程序运行性能么?

首先,try catch使用,要尽可能的缩小作用域,当try catch作用域内未抛出异常时,性能影响并不大,但是只要抛出了异常就对性能影响是成倍的。 具体我进行了简单的测试,分别针对了以下三种情况。

  • 没有try catch
  • 有try catch但是没有异常
  • 既有try catch又有异常。
   fun test() {
        val start = System.currentTimeMillis()
        var a = 0
        for (i in 0..1000) {
            a++
        }
        Log.d("timeStatistics", "noTry:" + (System.currentTimeMillis() - start))
    }

    fun test2() {
        val start = System.currentTimeMillis()
        var a = 0
        for (i in 0..1000) {
            try {
                a++
            } catch (e: java.lang.Exception) {
                e.printStackTrace()
            }
        }
        Log.d("timeStatistics", "tryNoCrash:" + (System.currentTimeMillis() - start))
    }

    fun test3() {
        val start = System.currentTimeMillis()
        var a = 0
        for (i in 0..1000) {
            try {
                a++
                throw java.lang.Exception()
            } catch (e: java.lang.Exception) {
                e.printStackTra
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值