| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Google推荐在Compose中使用collectAsStateWithLifecycle替代collectAsState -> 正文阅读 |
|
[移动开发]Google推荐在Compose中使用collectAsStateWithLifecycle替代collectAsState |
写在前面以生命周期感知方式收集流是在 Android 上收集流的推荐方式。 如果您使用 Jetpack Compose 构建 Android 应用程序,请使用 collectAsStateWithLifecycle API 从您的UI以生命周期感知的方式收集流。 collectAsStateWithLifecycle 允许您的应用在不需要时保存应用资源,例如当应用在后台时。 不必要地保持资源活动可能会影响用户的设备运行状况。 此类资源可能包括 Firebase 查询、位置或网络更新以及数据库连接。 collectAsStateWithLifecyclecollectAsStateWithLifecycle 是一个可组合函数,它从流中收集值并以生命周期感知的方式将最新值表示为 Compose State。 每次发生新的流发射时,此 State 对象的值都会更新。 这会导致组合中每个 State.value 使用的重新组合。 默认情况下,collectAsStateWithLifecycle 使用 Lifecycle.State.STARTED 开始和停止从流中收集值。 这发生在生命周期移入和移出目标状态时。 您可以在 minActiveState 参数中配置此生命周期状态。 ?以下代码片段演示了如何使用 collectAsStateWithLifecycle 来收集可组合函数中的 ViewModel 已暴露的 StateFlow 的 uiState 字段:
每次 AuthorViewModel 的 uiState 发出一个新的 AuthorScreenUiState 值时,都会重新组合 AuthorRoute。 要开始在您的项目中使用 collectAsStateWithLifecycle API,请将 androidx.lifecycle.lifecycle-runtime-compose 工件添加到您的项目中。
底层实现?在底层,collectAsStateWithLifecycle 的实现使用了 repeatOnLifecycle API,这是在 Android 中使用 View 系统收集流的推荐方式。 collectAsStateWithLifecycle 使您无需键入下面显示的样板代码,该样板代码还以生命周期感知的方式从可组合函数中收集流:
在架构中使用?你的应用架构中的类型不应该知道其他类型的实现细节。 UI 不应该知道 ViewModel 如何产生 UI 状态。 如果 UI 在屏幕上不可见,则应停止流收集以释放应用程序资源(如果合适)。 UI 可以通过使用 collectAsStateWithLifecycle 收集 UI 状态来帮助释放资源。 ViewModel 可以通过以收集器感知的方式生成 UI 状态来执行相同的操作。 如果没有收集器,例如当 UI 在屏幕上不可见时,请停止来自数据层的上游流。 您可以在生成 UI 状态时使用 .stateIn(WhileSubscribed) 流 API 执行此操作。? ?流的消费者和生产者不需要知道彼此是如何实现的。 在具有多个环境、变体、库和功能的大型应用程序中找出实现细节可能非常耗时。 更糟糕的是,维护依赖于实现细节的代码非常困难。 在后台保持资源活跃Android 应用程序可以在无数的 Android 设备上运行。不幸的是,并非所有设备和所有用户都拥有无穷无尽的资源。应用程序通常在受限环境中运行。运行 Android 应用时,有一些重要因素会影响用户体验和设备系统健康:
根据设备类型和设备运行的 Android 版本,保持不需要的资源处于活动状态可能会产生负面影响。在 UI 层中使用 collectAsStateWithLifecycle 可以使层次结构的其余部分释放资源。 与collectAsState 比较开发者经常会问:如果 collectAsStateWithLifecycle 是从 Android 中的可组合函数中收集流的最安全方式,为什么我们现在需要 collectAsState API? 或者为什么不将生命周期感知功能添加到 collectAsState 而不是创建新的 API? 可组合函数的生命周期与 Compose 运行的平台无关。 如可组合的生命周期页面中所述,可组合函数的实例进入组合,重新组合 0 次或更多次,然后离开组合。 collectAsState API 遵循组合的生命周期。 它在可组合项进入组合时开始收集流,并在离开组合时停止收集。 collectAsState 是与平台无关的 API,可用于收集流。 但是,在 Android 应用程序中使用 Compose 时,Android 生命周期在如何管理资源方面也起着至关重要的作用。 即使 Compose 在 Android 应用程序处于后台时停止重新组合,collectAsState 也会使集合保持活动状态。 这使得层次结构的其余部分无法释放资源。 collectAsState 和 collectAsStateWithLifecycle 在 Compose 中都有一个用途。 后者用于开发安卓应用,前者用于其他平台开发。 从 collectAsState 迁移到 collectAsStateWithLifecycle 很简单:
以生命周期感知方式收集流是在 Android 上收集流的推荐方式,以使您的应用程序的其他部分能够在需要时释放资源。 如果您使用 Jetpack Compose 构建 Android 应用程序,请使用 collectAsStateWithLifecycle 可组合函数来执行此操作。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 4:52:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |