我想将所有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
}
}
答案 0 :(得分:0)
基本上,协程暂停函数只能从另一个暂停函数或协程生成器(如异步或启动)中调用。 由于Java不支持协程,因此无法从Java代码启动它。
但是两者都可以混合使用,例如,您可以创建带有实时数据的viewmodel,该数据会从协程启动的viewModelScope中进行更新。在活动/片段中可以观察到结果或进度。
希望这对您有所帮助。