Kotlin 协程在 Android 中的基础应用
通过前面的章节,我们已经了解了 Kotlin 协程的基本使用和相关基础知识点,包括:
- 协程的基础使用方式和基本原理。
CoroutineContext:协程上下文中包含的Element以及上下文的作用和传递。CoroutineDispatcher:协程调度器的使用。CoroutineStart:协程启动模式在不同模式下的区别。CoroutineScope:协程作用域的分类,以及不同作用域下的异常处理。- 挂起函数以及
suspend关键字的作用,以及Continuation的挂起恢复流程。 CoroutineExceptionHandler:协程异常处理,结合supervisorScope和SupervisorJob的使用。
本章主要讲解 Kotlin 协程在 Android 中的基础使用。我们先引入相关扩展库组件:
implementation "androidx.activity:activity-ktx:1.2.2"
implementation "androidx.fragment:fragment-ktx:1.3.3"
Android 使用 Kotlin 协程
我们在之前的章节中使用协程的方式都是通过 runBlocking 或者使用 GlobalScope 的 launch、async 方式启动,当然也可以通过创建一个新的 CoroutineScope,然后通过 launch 或者 async 方式启动一个新的协程。在讲解协程异常处理的篇章中就提到,通过 SupervisorJob 和 CoroutineExceptionHandler 实现了一个和 supervisorScope 相同的作用域。
private fun testException() {
val exceptionHandler = CoroutineExceptionHandler { coroutineContext, throwable ->
Log.d("exceptionHandler", "${coroutineContext[CoroutineName].toString()} 处理异常:$throwable")
}
val supervisorScope = CoroutineScope(SupervisorJob() + exceptionHandler)
with(supervisorScope) {
launch {
// ...
}
}
}
在第一节中提到 runBlocking 它会将常规的阻塞代码连接在一起,主要用于 main 函数和测试中。而 GlobalScope 是一个全局顶级协程,我们在之前的案例中基本都使用这种方式。但是这个协程是在整个应用程序生命周期内运行的,如果我们用 GlobalScope 启动协程,管理将会变得极其繁琐,而且需要对于各种引用的处理以及管控异常取消操作。


