Android 处理碎片的正确方法';在viewModel中创建流
我有一个Android 处理碎片的正确方法';在viewModel中创建流,android,kotlin,viewmodel,kotlin-coroutines,flow,Android,Kotlin,Viewmodel,Kotlin Coroutines,Flow,我有一个片段和一个视图模型 在片段中,我有一个视图,它公开了一个协同程序流,我想在视图模型中处理集合,显然我不会将视图引用到视图模型 我的想法基本上是在片段onViewCreated: view.flow .onEach(viewModel::collect) .launchIn(viewModel.viewModelScope) 这是可行的,但是。。。这是一个好的实现吗?或者有更好的方法来实现我的目标吗?我相信您可以使用标准片段的作用域,而不是viewmodelScope v
片段
和一个视图模型
在片段
中,我有一个视图
,它公开了一个协同程序流,我想在视图模型
中处理集合,显然我不会将视图
引用到视图模型
我的想法基本上是在片段onViewCreated
:
view.flow
.onEach(viewModel::collect)
.launchIn(viewModel.viewModelScope)
这是可行的,但是。。。这是一个好的实现吗?或者有更好的方法来实现我的目标吗?我相信您可以使用标准片段的作用域,而不是viewmodelScope
viewLifecycleOwner.lifecycleScope
fromandroidx.lifecycle:lifecycle runtime ktx:2.2.0
依赖项
像这样
view.flow
.onEach(viewModel::collect)
.launchIn(viewLifecycleOwner.lifecycleScope)
我考虑过了,但onEach是可支持的,这意味着挂起的块将写入视图模型中,但实际上作用于片段,而实际上想法是在viewmodel范围内启动它(ofc我可以创建一个新的协同程序,但避免了这一点)viewmodel.collect是可挂起的,但是,如果希望在viewmodelscope中执行viewmodel中的代码,则可以在viewmodel中启动具有viewmodel作用域的新协同程序。如果您在viewmodel作用域中启动视图流,您将泄漏视图/片段,我对此感到震惊。。。