我有一个网络电话可以得到一些LiveData。LiveData是与我的片段的生命周期所有者一起观察的,因此UI更新是安全的。但是,我发出的协同调用也需要限定到碎片的生命周期所有者吗?换句话说,我用哪一种,有关系吗?
CoroutineScope(Dispatchers.IO).launch或
fragment.lifecycleScope.launch(context = Dispatchers.IO)发布于 2020-09-08 03:44:45
CoroutineScope是一个CoroutineScope(Dispatchers.IO).launch{},它启动其中的所有协同线并返回一个协同作业。但是,如果您的活动/片段/视图模型被破坏,则需要调用cancel()来停止此范围内所有的攻击协同。如果在此之后任何协同线在后台继续运行,则可能导致内存泄漏。
fragment.lifecycleScope.launch(context = Dispatchers.IO){}是一个生命周期感知的协同作用域,因此如果生命周期(活动/片段/视图模型)被销毁,在这个范围内启动的任何协同机制都会被自动取消。
最好在lifecycleScope中使用协同机制,这样您就不必管理协同作业的生命周期了
https://stackoverflow.com/questions/63784156
复制相似问题