关于try catch和CoroutineExceptionHandler的问题
来源:7-8 协程的异常处理2

慕UI8482615
2019-08-05
这是我的一段代码,已经在顶级try catch了,程序还是崩了,感觉捕获不了异常:
mBtn.setOnClickListener {
try {
GlobalScope.launch {
// 或者try catch 这个范围
val job = GlobalScope.launch {
launch {
throw NullPointerException()
}
}
job.join()
}
} catch (e: Exception) {
Log.e(TAG, e.message + " --- ")
}
}
反而用CoroutineExceptionHandler就可以捕获异常:
mBtn.setOnClickListener {
GlobalScope.launch {
val job = GlobalScope.launch(CoroutineExceptionHandler { coroutineContext, throwable ->
Log.e(TAG, throwable.message)
}) {
launch {
throw NullPointerException()
}
}
job.join()
}
}
我没看错的话老师你《7-6 协程的异常处理1》的18:14秒运行完的结果也是崩了的,用的也是try catch,老师能解释一下这是什么情况么?为什么用try catch还是会崩,CoroutineExceptionHandler就不会崩
写回答
1回答
-
bennyhuo
2019-08-05
其实视频也有提到,CancelableExceptIon是一个有特定含义的异常,协程用他来表示被取消,而不是一个真正意义上的异常,因此ExceptionHandler不去捕获这个异常。而try catch 是java本身的异常机制,他并不在乎是什么异常,因此捕获的时候也可以捕获到取消异常了。
022019-08-06
相似问题