【问题标题】:Wait for Kotlin Coroutines result in Java等待 Kotlin Coroutines 导致 Java
【发布时间】:2019-10-09 16:51:01
【问题描述】:

我想将所有AsyncTask 重写为Kotlin Coroutines。在Java 代码中调用并等待来自Coroutines 的结果。 例如:我在Kotlin中有一些长时间消耗的方法。

科特林:

class Coroutines {
     suspend fun readFile(): String {
         return GlobalScope.async {
            read long file...
          }.await()
     }
}

现在,我想等待(但不阻塞 UI 线程)完成方法,最好不要回调。

Java:

public class MainActivity extends AppCompatActivity {
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        Coroutines c = new Coroutines();
        c.readFile(); //Wait for result but no block UI thread
    }
}

【问题讨论】:

  • 可能是不可能的。您需要阻止或使用回调。 Java 没有协程。
  • 等待结果但不阻塞?你不能两者兼得。

标签: java kotlin-coroutines


【解决方案1】:

基本上,协程挂起函数只能从另一个挂起函数或协程构建器(如异步或启动)调用。 由于 java 不支持协程,所以无法从 java 代码中启动它。

但两者的混合是可能的,例如,您可以创建一个带有实时数据的视图模型,该数据从协程启动的表单 viewModelScope 更新。结果或进度可以在activity/fragment中观察到。

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 2020-09-02
    • 2021-10-15
    • 2019-07-18
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2021-04-28
    • 2013-05-17
    • 2018-08-06
    相关资源
    最近更新 更多