Android Exception处理

异常发生时,如果没有一个异常处理器来处理这个异常,程序会被中止。在 JVM 当中有一个预先定义好的异常处理层次结构。

结构中的第一层是 catch 块。

try {

    crashyCode()

} catch (e: IllegalStateException) {

    // 处理 IllegalStateException

} catch (e: HTTPException) {

    // 处理 HTTPException

}

如果第一个 catch 块无法处理这个异常,异常便会被传递给下面的 catch 块。如果所有的 catch 块都无法处理某个异常,该异常便会交由当前线程的 UncaughtExceptionHandler 来处理。UncaughtExceptionHandler 是个只有一个方法的接口。

val currentThread = Thread.currentThread()

currentThread.setUncaughtExceptionHandler { thread, exc ->

    // 处理当前线程中所有未捕获的异常

}

UncaughtExceptionHandler 可以调协在当前线程里,未被 catch 块捕获的异常处理流程会先来到这里;还可以设置在 ThreadGroup 当中,当前线程的 UncaughtExceptionHandler 无法处理的异常会在这里被处理。如果 ThreadGroup 的 UncaughtExceptionHandler 还是无法处理该异常,那么最终将会被交由默认异常处理程序 ( default uncaught exception handler ) 处理,也就是打印出异常栈,并终止程序。当然你也可以覆盖这种行为:

Thread.setDefaultUncaughtExceptionHandler { thread, exc ->

    // 处理所有未捕获的异常

}

猜你喜欢

转载自blog.csdn.net/zenmela2011/article/details/123882482