我目前正在学习如何使用协同程序,而在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。