在没有析构函数/生命周期的类中启动协程

我目前正在学习如何使用协同程序,而在Android下,我很清楚。例如,当我想在Fragment中使用协程时,我只需实现Coroutinescope并在onDestroy中取消该范围。但是我该如何在不是Singleton / global的类中解决这个问题,并且因为没有每次都调用的析构函数,onDestroy等,所以我没有100%安全的方式来取消所有正在运行的协程。 Android Application类)。我是否仅执行Coroutinescope而没有调用cancel还是使用runBlocking?会导致内存泄漏吗?

lgl26 回答:在没有析构函数/生命周期的类中启动协程

您可以使用GlobalScope。 https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-global-scope/index.html

话虽这么说-您可能不应该这样。您should可以控制正在运行的作业。也许您可以在非生命周期类中创建暂停函数,并从可以控制生命周期的位置(活动,片段,演示者,视图模型)调用它们。

没有此控件可能会导致内存和工作泄漏。

希望这会有所帮助。干杯!

编辑:

我当时没想到的一件事是一位代表:

class YourNonLifecycleThingy(
    private val coroutineScope: CoroutineScope
) : CoroutineScope by coroutineScope

其中coroutineScope是例如您的活动的coroutineScope。

本文链接:https://www.f2er.com/3168157.html

大家都在问