Mar*_*rge 10 android coroutine kotlin kotlin-coroutines
我已经使用lifecyclesScope的launchWhenResumed很长时间了,但它似乎已被弃用。文档说使用repeatOnLifecycle(),但我只希望代码运行一次,就像它使用旧方法一样。
下面的代码具有相同的功能viewLifeCycleOwner.launchWhenResumed
lifecycleScope.launch {
lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED) {
// do your work here
}
}
Run Code Online (Sandbox Code Playgroud)
更新
我做了更多研究,看看代码背后发生了什么。
viewLifeCycleOwner.launchWhenResumed是一种可用于在关联视图恢复时启动协程的方法。当视图暂停或销毁时,协程将被取消。当您想要启动特定于视图生命周期的协程时,此方法非常有用。lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED)是一种可用于根据关联的 LifecycleOwner 的生命周期状态自动启动和停止协程的方法。当 LifecycleOwner 恢复时,协程就会启动。当 LifecycleOwner 暂停或销毁时,协程将被取消。当您想要启动与应用程序或组件的一般生命周期相关而不是特定于特定视图的协程时,此方法非常有用。Google 建议使用lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED)overviewLifeCycleOwner.launchWhenResumed来促进更高效、更灵活的方法来处理生命周期事件。
原因之一是它可以更有效地处理后台任务。当应用程序转到后台时,与视图关联的 LifecycleOwner 仍然可以处于 RESUMED 状态,即使该视图不可见。如果您viewLifeCycleOwner.launchWhenResumed在这种情况下启动协程,即使用户已经离开视图,协程也会继续运行,这可能会导致不必要的资源消耗。
另一方面,lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED)被设计为当与协程关联的 LifecycleOwner 暂停或销毁时自动停止协程。当应用程序进入后台时,与协程关联的 LifecycleOwner 通常会被暂停或销毁,这意味着协程将自动取消。
| 归档时间: |
|
| 查看次数: |
8284 次 |
| 最近记录: |