为什么我在 Java Android 中没有获得生命周期作用域?

Ish*_*ngh 5 java android kotlin kotlin-coroutines kotlin-flow

我想在现有的 Java 类中使用下面的代码,因为现在编写不可能在Kotlin中转换整个类:

viewLifecycleOwner.lifecycleScope.launchWhenStarted {
    viewModel.tasksEvent.collect { event ->
            
    }
}
Run Code Online (Sandbox Code Playgroud)

请建议最好的方法。我知道AsyncTask已被弃用。

Eri*_*ick 5

由于lifecycleScope它是一个扩展函数,因此您需要使用与 java 不同的语法来调用它:

LifecycleOwnerKt.getLifecycleScope(this)
Run Code Online (Sandbox Code Playgroud)

this你的活动、片段等在哪里?

之后,您可以将该生命周期作用域传递给新的 kotlin 类并通过回调返回结果,如下所示:

KotlinClass.kt

class KotlinClass {
    fun useCoroutineScope(
        scope: LifecycleCoroutineScope,
        callback: (SomeType) -> Unit
    ) {
        scope.launchWhenCreated {
            // Computation code...
            callback(someValue)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

}


Ser*_*gey 4

如果我没记错的话,Kotlin 协程不能与Java互操作。要使用Kotlin 协程,请遵循 Kotlin 代码,不要尝试在Java中使用协程。尝试使用上下文菜单项Convert Java File to Kotlin File将 Java 文件转换为 Kotlin 文件。或者将协程代码移动到单独的Kotlin文件中。