在一个Android应用程序中,我有一个场景,当我导航到另一个页面时,我想取消CoroutineScope
。但是,我仍然希望CoroutineScope
在用户返回到该页面后仍然可用。问题是在CoroutineScope
上调用cancel(),使得CoroutineScope
无法使用,因为它被取消了。我研究了一下,发现有一个名为cancelChidlren()的CoroutineContext
方法,如文档中所写:
使用Job.cancel()取消此协程的所有子作业,并提供可选的取消原因。与此作业整体上的Job. cancel()不同,此作业本身的状态不受影响。
使用coroutineScope.coroutineContext.cancelChildren()
而不是coroutineScope.cancel()
来取消协程作用域是个好主意吗?是否会导致问题(即内存泄漏),因为没有在CoroutineScope
上调用cancel()
,而只使用cancelChildren()
?
1条答案
按热度按时间txu3uszq1#
如果您需要在Activity停止时停止作业,那么是的,您应该使用
cancelChildren()
方法。在destroy中,应该调用cancel()
方法。我认为你不会有任何问题,如内存泄漏等。我在Presenters中使用了这种方法,它们工作正常。