kotlin 使用CoroutineContext #cancelChidren而不是CoroutineScope.cancel取消CoroutineScope

uqjltbpv  于 2023-06-24  发布在  Kotlin
关注(0)|答案(1)|浏览(142)

在一个Android应用程序中,我有一个场景,当我导航到另一个页面时,我想取消CoroutineScope。但是,我仍然希望CoroutineScope在用户返回到该页面后仍然可用。问题是在CoroutineScope上调用cancel(),使得CoroutineScope无法使用,因为它被取消了。我研究了一下,发现有一个名为cancelChidlren()CoroutineContext方法,如文档中所写:
使用Job.cancel()取消此协程的所有子作业,并提供可选的取消原因。与此作业整体上的Job. cancel()不同,此作业本身的状态不受影响。
使用coroutineScope.coroutineContext.cancelChildren()而不是coroutineScope.cancel()来取消协程作用域是个好主意吗?是否会导致问题(即内存泄漏),因为没有在CoroutineScope上调用cancel(),而只使用cancelChildren()

txu3uszq

txu3uszq1#

如果您需要在Activity停止时停止作业,那么是的,您应该使用cancelChildren()方法。在destroy中,应该调用cancel()方法。
我认为你不会有任何问题,如内存泄漏等。我在Presenters中使用了这种方法,它们工作正常。

相关问题