【问题标题】:android kotlin do work and wait for finish to perform another taskandroid kotlin 工作并等待完成以执行另一项任务
【发布时间】:2020-10-12 13:33:19
【问题描述】:

我想执行一些工作并等待结果。得到结果后,我想继续执行代码。我不想阻塞 UI 线程。

例如我想在同一个函数“doCoroutineWork”中有这个:

//PseudoCode//

fun doCoroutineWork()
{
  val result = doSomeWorkInBackground
  someOtherFunctionCall(result)
}

所以我想做的是在调用 doSomeWorkInBackground 时执行一些工作,等待结果,然后使用第一个结果调用新函数 someOtherFunctionCall。 最好的方法是什么?

【问题讨论】:

  • lifecycleScope.launch{ val result = withContext(Dispatchers.IO) { doSomeWorkInBackground() }; someOtherFunctionCall(result) }
  • suspend fun doCoroutineWork()... 您缺少 suspend 关键字

标签: android kotlin asynchronous kotlin-coroutines


【解决方案1】:

首先你应该让doCoroutineWork 成为一个挂起函数,比如: suspend fun doCoroutineWork()

然后你必须从 coroutineScope 调用它,在你可以调用的生命周期所有者(活动、片段)中

lifecycleScope.launch {
  val result = doCoroutineWork()
  someOtherFunctionCall(result)
}

或者在 ViewModel 中您可以访问 viewModelScope

还可以使用withContext(Dispatchers.XY),根据需要切换指定线程

【讨论】:

  • lifecycleScope 给了我未解决的参考。即使我将 implementation'androidx.lifecycle:lifecycle-runtime:2.2.0' 添加到 gradle 它仍然无法识别它......
  • androidx.lifecycle:lifecycle-runtime-ktx:2.2.0?见developer.android.com/topic/libraries/architecture/…
  • 好的,它现在可以识别生命周期范围,但它仍然不能正常工作。当我按照你的方式编写代码时应用程序崩溃。它还告诉我不需要在我的函数前面挂起这个词
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多