首页 > 解决方案 > withStateAtLeast 和 whenStateAtLeast 生命周期扩展方法的区别

问题描述

androidX 包中有两种类似的扩展方法,lifecycle-ktx签名略有不同。withStateAtLeastwhenStateAtLeast。我阅读了文档,但无法理解他们行为的差异。一个关于我们什么时候应该使用哪一个的例子,将不胜感激。

标签: androidkotlin-coroutinesandroid-lifecycleandroid-jetpack

解决方案


查看源代码,whenStateAtLeast在生命周期至少处于所需状态时运行给定块,如果生命周期在 block 运行时移动到较低状态,则暂停该块

同时withStateAtLeast只是等待生命周期至少处于所需状态并运行该块。所以它保证生命周期状态在它启动块时满足要求,但是如果块暂停,到它恢复时,生命周期可能处于较小的状态甚至被破坏。

因此,withStateAtLeast如果您需要在生命周期到达状态时(例如用户进入屏幕)并在任何情况下完成其执行,即使用户在执行完成之前离开屏幕,通常也是一个不错的选择。whenStateAtLeast当块与 UI 一起工作时,它又很有用,它保证每次恢复执行时,生命周期都处于正确状态,因此您可以安全地访问 UI。


推荐阅读