协程异常的个人感悟与在Android中的用例

束雅达
2023-12-01

协程的异常机制是非常有意思的,如果协程的异常「传递」机制没有搞懂的话,基本上协程是在瞎写的。

而Android里面,有Activity、Fragment相关UI更新在后台状态是不需要更新的。
甚至一些网络访问在某些时刻就需要被取消或者「停止」后续操作,其实这里面的停止是带引号的,因为一旦网络请求发送了,那么意味着操作系统已经为其建立了IO的管道,所以作为APP开发者是控制「不到」的,但是由于APP已经处于后台了,那么我们的请求本质不应该再「响应」。
所以一般APP处于后台后,请求发送了,就会等待它执行完成,但是后续的UI或者业务是不应该继续再执行,因为它是浪费性能的操作。

不过回到异常机制,最主要就是了解传统的线程UncaughtExcetion和协程的异常区别。

协程异常还有CancellationException也是让新手比较迷惑的地方。

最后再提一下当一个最顶层的scope被Cancel,它也是一个非常有意思的场景。比如:后续的Launch会失效、之前的未完成的Launch会收到CancellationException等。

最后推荐大家实践协程和Flow等各个Sample的Github:Kotlin-Coroutine-Use-Cases-on-Android 「包含了非常丰富的实践例子」

 类似资料: