You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

lifecycleScope.launchWhen系列API已废弃,单次执行的替代方案是什么?

替代已废弃的launchWhenStarted/whenStarted实现单次异步任务

已废弃的写法

  • 原launchWhenStarted API已废弃:
lifecycleOwner.lifecycleScope.launchWhenStarted {
    // Do something async
}
  • 结合launch和whenStarted的写法同样已废弃:
lifecycleOwner.lifecycleScope.launch {
    lifecycleOwner.whenStarted { 
        // Do something async
    }
}

更优雅的单次执行替代方案

如果需要仅在生命周期进入STARTED状态时执行一次异步任务,可以使用awaitStateAtLeast实现,无需嵌套协程:

lifecycleOwner.lifecycleScope.launch {
    // 挂起协程,直到生命周期状态至少为STARTED
    lifecycleOwner.lifecycle.awaitStateAtLeast(Lifecycle.State.STARTED)
    // 执行单次异步操作
    // Do something async
}

这个方案的优势:

  • 无需嵌套协程,代码结构简洁
  • 仅在生命周期首次达到STARTED状态时执行一次任务,符合需求
  • 自动遵循生命周期规则,当生命周期销毁时,协程会自动取消

关于你的现有写法

你之前的嵌套写法虽然能实现功能,但存在不必要的协程嵌套,且withStarted的block不支持挂起函数,导致需要额外启动协程,上述方案可以避免这些问题。

内容的提问来源于stack exchange,提问作者user924

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 04:33:17