0Pricing
Android Academy · 课时

协程基础和作用域

在正确的作用域中启动协程

协程基础和作用域 是 CoddyKit 上的免费 Android Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Android Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Android Academy 课程共包含 4 节课。

什么是协程?

协程让您能够以顺序式风格编写异步、非阻塞代码。对于网络和数据库输入输出等任务,它们是 Kotlin 对回调和线程的解决方案。

suspend 函数

标记为 suspend 的函数可以在不阻塞线程的情况下暂停,并在稍后恢复。它只能从协程或另一个挂起函数中调用。

suspend fun fetchUser(): User {
    delay(1000) // non-blocking pause
    return User(1, "Ada", "ada@x.com")
}

挂起与阻塞

delay 会挂起协程,但会释放线程供其他工作使用。Thread.sleep 会阻塞整个线程。协程倾向于使用挂起,以保持高效。

启动协程

在 CoroutineScope 上使用 launch 启动协程。它会并发运行,但不会返回结果。

scope.launch {
    val user = fetchUser()
    println(user.name)
}

使用 async 获取结果

需要获取返回值时,请使用 async。它会返回一个可通过 await 等待的 Deferred。

val deferred = scope.async { fetchUser() }
val user = deferred.await()

什么是 CoroutineScope?

作用域定义其中启动的协程的生命周期。取消作用域后,其中的所有协程都会被取消。这就是结构化并发。

结构化并发

由于协程存在于作用域内,因此不会意外地超出作用域的生命周期。这可以防止泄漏:当屏幕离开时,其作用域会被取消,其中的工作也会停止。

取消

取消作用域或任务后,协程会在下一个挂起点抛出 CancellationException,从而干净地停止。

val job = scope.launch { /* work */ }
job.cancel() // stops it cooperatively

协作式取消

协程必须协作:长时间运行的 CPU 循环应检查 isActive,或调用挂起函数,以便让取消操作生效。

while (isActive) {
    // do a chunk of work
}

协程中的异常

launch 中未捕获的异常会传播到作用域,并取消其同级协程(除非使用 SupervisorJob)。请使用 try/catch 或 CoroutineExceptionHandler 处理错误。

为什么作用域在 Android 中很重要

Android 提供了与组件生命周期绑定的现成作用域,例如 viewModelScope 和 lifecycleScope,因此协程会在适当的时间自动取消。这就是下一课的内容。

快速检查

测试您对协程作用域的理解。

回顾

您学会了:

  • suspend 函数可以在不阻塞的情况下暂停。
  • launch 启动无需等待结果的工作;async 返回结果。
  • CoroutineScope 限定协程的生命周期(结构化并发)。
  • 取消是协作式的。

常见问题解答

「协程基础和作用域」课时是免费的吗?

是的 — 「协程基础和作用域」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Android Academy 课程的其余内容,请升级到 CoddyKit PRO。 Android Academy 课程共包含 4 节课。

「协程基础和作用域」这节课中我会学到什么?

在正确的作用域中启动协程 你通过在浏览器中直接运行的动手代码来练习 Android Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Android Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Android Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「协程基础和作用域」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Android Academy 课中编写并运行代码吗?

能。每节 Android Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 协程基础和作用域
  2. viewModelScope 和调度器
  3. Kotlin Flow 基础
  4. StateFlow 和 SharedFlow
← 返回 Android Academy