android - 带 fragment 的协程作用域

标签 android kotlin-coroutines

我有一个获取一些 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/

相关文章:

java - Android 中 GPS_PROVIDER 或 NETWORK_PROVIDER 的位置不一致

android - 如何按发布日期对 20 个 RSS 链接进行排序并将其全部显示在一个页面中

java - Fragment 类内部的 ProgressBar 在 setMax 方法中导致 NullPointerException?

android - 任务 ':app:prepareDebugAndroidTestDependencies' 依赖错误执行失败

android - 为什么kotlin协程可以在另一个线程上操作UI元素

安卓 | Kotlin |流 - 不能转换为 kotlinx.coroutines.flow.StateFlow

android - 如何取消正在运行的 LiveData 协程 block

android - androidx.paging.DataSource.Factory 时 Room 无法检索数据(使用 LiveData + Kotlin 协程)

android - 通知和应用程序历史记录冲突中的 PendingIntent

android - 无法使用 liveData 或 viewModelScope.launch