等待Kotlin协程产生Java

时间:2019-10-09 16:51:01

标签: java kotlin-coroutines

我想将所有AsyncTask重写为Kotlin Coroutines。调用并等待Coroutines代码中来自Java的结果。 例如: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
    }
}

1 个答案:

答案 0 :(得分:0)

基本上,协程暂停函数只能从另一个暂停函数或协程生成器(如异步或启动)中调用。 由于Java不支持协程,因此无法从Java代码启动它。

但是两者都可以混合使用,例如,您可以创建带有实时数据的viewmodel,该数据会从协程启动的viewModelScope中进行更新。在活动/片段中可以观察到结果或进度。

希望这对您有所帮助。