在 Activity/Fragment 中调用多个挂起函数

Calling multiple suspend functions in Activity/Fragment

在 activity 或片段中调用多个挂起函数时推荐使用哪种方法? (有些函数需要另一个操作的结果)

  1. 调用一个 lifecycleScope.launch lambda
  2. 中的每个函数
  3. 每个挂起函数使用多个lifecycleScope.launch函数

行为是否改变?

每次调用 CoroutineScope.launch 时,都会创建并启动一个全新的协程,而不会阻塞当前线程,returns 将协程引用为作业。

所以回答你的问题:

  1. 这些挂起函数将在单个协程中执行。那是什么意思?这意味着它们的执行顺序将是连续的。
lifecycleScope.launch {
    invokeSuspend1() // This will be executed first
    invokeSuspend2() // Then this will be excuted
}

先执行invokeSuspend1(),执行完再执行invokeSuspend2()

  1. 为每个挂起函数使用多个 CoroutineScope.launch 函数将创建多个协程,使每个挂起函数彼此独立。所以执行的顺序是不可预测的。
lifecycleScope.launch {
    invokeSuspend1()
}

lifecycleScope.launch{
    invokeSuspend2()
}

// What is the order of invokeSuspend1 and invokeSuspend2? You'll never know

如果函数需要完成另一个操作的结果,我建议您使用单个协程来保持它们的执行顺序。

这取决于这些函数的作用。如果它们依赖于另一个挂起函数的结果,则在同一个启动作业中启动它们。

如果其中一些可以 运行 异步,将这些函数调用包装在 async 块中。

如果作业应该以特定的生命周期状态开始,您可以使用方便的 lifecycle libs,因此您可以访问 launchWhenCreatedlaunchWhenResumedlaunchWhenStarted