首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有析构函数/生命周期的类中启动协程

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

Stack Overflow用户
提问于 2019-11-04 16:41:35
回答 1查看 851关注 0票数 0

我目前正在学习如何使用协程,在Android下,这对我来说是相当清楚的。例如,当我想在Fragment中使用协程时,我只需实现CoroutineScope,并在onDestroy中取消该作用域。但是我如何在一个不是单例/全局的类中做到这一点,并且我没有一个100%安全的方法来取消所有正在运行的协程,因为没有每次都会调用的析构函数、onDestroy等(例如Android Application类)。我是在不调用cancel的情况下实现CoroutineScope,还是使用runBlocking?这会导致内存泄漏吗?

EN

回答 1

Stack Overflow用户

发布于 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)。

没有这种控制可能会导致内存和工作泄漏。

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

编辑:

有一件事我当时没有想到,那就是委托:

代码语言:javascript
复制
class YourNonLifecycleThingy(
    private val coroutineScope: CoroutineScope
) : CoroutineScope by coroutineScope

其中,coroutineScope是您的活动的coroutineScope。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58689754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档