返回

Android上的协程(二):入门

Android

在 Android 上使用协程(二):入门

协程在 Android 开发中用途广泛,本篇重点在于开始任务并追踪已经开始的任务。在上一篇文章中,我们探索了协程擅长解决的问题。通常,协程对于下面两个常见的编程问题来说都是不错的解决方案:

  • 异步编程: 协程可以轻松地处理异步任务,而无需使用回调或 Future 等传统方法。
  • 取消任务: 协程可以轻松地取消任务,而无需担心死锁或其他问题。

为了解决这些问题,协程基于基础函数添加了 suspend 和 resume 修饰符。suspend 修饰符允许协程在执行期间暂停,而 resume 修饰符允许协程在暂停后继续执行。

启动任务

协程任务的启动非常简单。只需创建一个协程作用域,然后在其中启动协程即可。协程作用域是一个轻量级的对象,它负责管理协程的生命周期。

val scope = CoroutineScope(Dispatchers.Main)
scope.launch {
    // 协程代码
}

上面的代码创建一个协程作用域,并在其中启动一个协程。协程代码可以在 launch 块中编写。

追踪任务

协程任务可以很容易地被追踪。只需使用 Future 或 CompletableFuture 对象即可。Future 对象表示一个异步计算的结果,而 CompletableFuture 对象表示一个可取消的异步计算的结果。

val future = scope.async {
    // 协程代码
}
future.get()

上面的代码创建一个协程作用域,并在其中启动一个协程。协程代码可以在 async 块中编写。future 对象表示协程的计算结果。get() 方法可以获取协程的计算结果。

取消任务

协程任务可以很容易地被取消。只需使用 Job 对象即可。Job 对象表示一个协程任务,它可以被取消或加入。

val job = scope.launch {
    // 协程代码
}
job.cancel()

上面的代码创建一个协程作用域,并在其中启动一个协程。协程代码可以在 launch 块中编写。job 对象表示协程任务。cancel() 方法可以取消协程任务。

生命周期作用域

协程作用域可以与 Android 的生命周期相关联。这可以防止协程在 Activity 或 Fragment 销毁后继续执行。

val scope = lifecycleScope
scope.launch {
    // 协程代码
}

上面的代码创建一个与当前 Activity 或 Fragment 的生命周期相关联的协程作用域。协程代码可以在 launch 块中编写。当 Activity 或 Fragment 销毁时,协程作用域也会被销毁,从而取消所有正在执行的协程任务。

SupervisorJob

SupervisorJob 是一个特殊的 Job 对象,它可以防止子协程任务的取消导致父协程任务的取消。

val job = SupervisorJob()
val scope = CoroutineScope(job + Dispatchers.Main)

上面的代码创建一个 SupervisorJob 对象,并将其与协程作用域关联。这样,子协程任务的取消就不会导致父协程任务的取消。

总结

协程是 Android 开发中的一个非常强大的工具。它们可以轻松地处理异步任务、取消任务和生命周期管理。在本文中,我们介绍了协程的基本概念,以及如何在 Android 中使用协程。