launchWhenStarted 和 repeatOnLifecycle(STARTED) 采集流的区别
Difference between launchWhenStarted and repeatOnLifecycle(STARTED) in collecting flows
As launchWhenStarted and repeatOnLifecycle(STARTED) provide completely different functionality (launchWhenStarted suspends the execution of the coroutine, and repeatOnLifecycle cancels and restarts a new coroutine), if the names of the new APIs were similar (for example, using launchWhenever for the restarting APIs), developers could’ve got confused and even use them interchangeably without noticing.
什么时候使用哪个更简单的解释是什么?
launchWhenStarted
只是一次延迟。
repeatOnLifecycle
创建一个挂起点作为处理程序,每次生命周期进入提供的状态时运行提供的块,并在它低于它时取消它(因此对于 STARTED
它发生在它得到时停止)。
repeatOnLifecycle
在每次重复时从头开始重新启动协程,并在每次生命周期低于指定状态时取消协程。它非常适合收集大多数流,因为它会在不需要时完全取消流,从而节省与继续发出值的流相关的资源。
launchWhenX
不会取消协程并重新启动它。它只是在启动时推迟,并在低于指定状态时暂停执行。他们计划弃用这些函数,但我怀疑如果他们这样做的话,将需要一些替代品,因为你正在调用一些耗时的挂起函数,然后想在它完成时做一些事情,比如开始一个片段事务。为此使用 repeatOnLifecycle
将导致重做耗时的操作。
As launchWhenStarted and repeatOnLifecycle(STARTED) provide completely different functionality (launchWhenStarted suspends the execution of the coroutine, and repeatOnLifecycle cancels and restarts a new coroutine), if the names of the new APIs were similar (for example, using launchWhenever for the restarting APIs), developers could’ve got confused and even use them interchangeably without noticing.
什么时候使用哪个更简单的解释是什么?
launchWhenStarted
只是一次延迟。
repeatOnLifecycle
创建一个挂起点作为处理程序,每次生命周期进入提供的状态时运行提供的块,并在它低于它时取消它(因此对于 STARTED
它发生在它得到时停止)。
repeatOnLifecycle
在每次重复时从头开始重新启动协程,并在每次生命周期低于指定状态时取消协程。它非常适合收集大多数流,因为它会在不需要时完全取消流,从而节省与继续发出值的流相关的资源。
launchWhenX
不会取消协程并重新启动它。它只是在启动时推迟,并在低于指定状态时暂停执行。他们计划弃用这些函数,但我怀疑如果他们这样做的话,将需要一些替代品,因为你正在调用一些耗时的挂起函数,然后想在它完成时做一些事情,比如开始一个片段事务。为此使用 repeatOnLifecycle
将导致重做耗时的操作。