use*_*687 5 android kotlin-coroutines
我有一个网络调用来获取一些 LiveData。LiveData 是由我的 Fragment 的生命周期所有者观察的,因此 UI 更新是安全的。但是我进行的协程调用是否也需要将范围限定在片段的生命周期所有者范围内?换句话说,我使用其中哪一个重要吗?
CoroutineScope(Dispatchers.IO).launch
Run Code Online (Sandbox Code Playgroud)
或者
fragment.lifecycleScope.launch(context = Dispatchers.IO)
Run Code Online (Sandbox Code Playgroud)
CoroutineScope(Dispatchers.IO).launch{}是一个CoroutineScope,它启动其中的所有协程并返回Coroutine Job。cancel()但是,如果您的活动/片段/视图模型被破坏,您需要调用停止此范围内所有启动的协程。如果此后任何协程继续在后台运行,则可能会导致内存泄漏。
fragment.lifecycleScope.launch(context = Dispatchers.IO){}是一个生命周期感知的协程范围,因此如果生命周期(活动/片段/视图模型)被破坏,在此范围内启动的任何协程都会自动取消。
最好使用协程,lifecycleScope这样您就不必管理协程作业的生命周期
| 归档时间: |
|
| 查看次数: |
5243 次 |
| 最近记录: |