我有一个获取一些 LiveData 的网络调用。 LiveData 由我的 Fragment 的生命周期所有者观察,因此 UI 更新是安全的。但是我进行的协程调用是否也需要限定在 fragment 的生命周期所有者内?换句话说,我使用其中哪一个重要吗?
CoroutineScope(Dispatchers.IO).launch
或
fragment.lifecycleScope.launch(context = Dispatchers.IO)
最佳答案
CoroutineScope(Dispatchers.IO).launch{}
是一个CoroutineScope,它启动其中的所有协程并返回一个Coroutine Job。
但是如果您的 Activity/fragment/ View 模型被销毁,您需要调用 cancel()
来停止此范围内所有已启动的协程。如果之后有协程继续在后台运行,可能会导致内存泄漏。
fragment.lifecycleScope.launch(context = Dispatchers.IO){}
是一个Lifecycle-aware Coroutine Scope,因此如果生命周期( Activity/fragment/ View 模型)被销毁。
最好将协程与 lifecycleScope
一起使用,这样您就不必管理协程作业的生命周期
关于android - 带 fragment 的协程作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63784156/