我有一些协程应该在每次Fragment
调用onResume()
时重新启动。
我尝试过以下方法:
val renderer = ...
val outerFlow = ...
val lifecycleCoroutineScope = myFragment.viewLifecycleOwner.lifecycleScope
lifecycleCoroutineScope.launchWhenResumed {
outerFlow.onEach(renderer::render).launchIn(this)
}
但它只工作到Fragment
的视图第一次被破坏。我的意思是第二次和下面的onResume()
调用被忽略。
所以请你帮我找出:如何在每次onResume()
调用时正确启动协同程序?
2条答案
按热度按时间zlhcx6iw1#
我认为是呼叫
launchIn(this)
无法接通,请尝试呼叫其他终端话务员,如collect
:医生说:
不建议使用此API,因为它在某些情况下会导致资源浪费。请改用
Lifecycle.repeatOnLifecycle
API。此API将在未来的版本中删除。对于
Lifecycle.repeatOnLifecycle
,它将类似于以下内容:egmofgnx2#
我已经解决了这个问题。
问题不在协程中,而是在
LifecycleOwner
中。在Lifecycle
获得Lifecycle.State.DESTROYED
状态后,它也会破坏,不再工作。我被绑定到
Fragment
视图的生命周期,当我们离开当前片段后,它的视图生命周期被破坏。因此,将
fragment.viewLifecycleOwner.lifecycleScope
替换为fragment.lifecycleScope
对我很有帮助。