我目前正在学习如何使用协程,在Android下,这对我来说是相当清楚的。例如,当我想在Fragment中使用协程时,我只需实现CoroutineScope,并在onDestroy中取消该作用域。但是我如何在一个不是单例/全局的类中做到这一点,并且我没有一个100%安全的方法来取消所有正在运行的协程,因为没有每次都会调用的析构函数、onDestroy等(例如Android Application类)。我是在不调用cancel的情况下实现CoroutineScope,还是使用runBlocking?这会导致内存泄漏吗?
发布于 2019-11-04 17:02:35
您可以使用GlobalScope。https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-global-scope/index.html
这就是说-你可能不应该这样做。你可以控制你正在运行的作业( should )。也许您可以在非生命周期类中创建挂起函数,并从某个地方调用它们,在那里您可以控制生命周期(可以是Activity、Fragment、Presenter、ViewModel)。
没有这种控制可能会导致内存和工作泄漏。
希望这能有所帮助。干杯!
编辑:
有一件事我当时没有想到,那就是委托:
class YourNonLifecycleThingy(
private val coroutineScope: CoroutineScope
) : CoroutineScope by coroutineScope其中,coroutineScope是您的活动的coroutineScope。
https://stackoverflow.com/questions/58689754
复制相似问题