SuperAPI AI 工具集

collecting-flows-safely

通用与其它

查看项目

更新于 10-16 00:20

技能介绍

用途:把 Jetpack Compose 中源自 ViewModel、仓库、传感器、网络、WebSocket、定位等组合外部数据流的收集行为绑定到 UI 生命周期,避免应用在后台继续消耗 CPU 与电量。

主要能力:将 collectAsState() 替换为 collectAsStateWithLifecycle(),默认 minActiveState 为 STARTED;对非 StateFlow 提供 initialValue;可为需焦点的小组件改用 Lifecycle.State.RESUMED,不可使用 CREATED。对高频发射(约每 100ms 以上一次)的流,在上游加 .conflate() 和/或 .distinctUntilChanged(),并用 remember(key) 包裹算子链;使用 distinctUntilChanged 时需确保类型 equals() 正确。禁止把 Flow<T> 作为 composable 参数,应在调用方收集后传具体值。需要 State 到 Flow 方向时用 snapshotFlow,仅做副作用时优先 snapshotFlow 而非 derivedStateOf。

使用方式:引入 androidx.lifecycle:lifecycle-runtime-compose(2.6+),把 viewModel.uiState.collectAsState() 改为 collectAsStateWithLifecycle();冷流或 SharedFlow 传 initialValue;高频流先 remember 包裹 .conflate().distinctUntilChanged() 再收集。

适用场景:ViewModel 或 Repository 暴露 StateFlow、SharedFlow 或冷流给 Compose 界面;出现后台耗电、应用进入最近任务后仍在工作;composable 消费传感器、位置、GPS、WebSocket、动画帧等外部数据。

限制:流若完全在同一 composable 的 remember 块内创建并消费,应直接用 mutableStateOf;数据源已是 State<T> 时不要包成流;必须在 Activity 停止后仍运行的常驻后台监听应交给 Service、WorkManager 或 Activity 中的 repeatOnLifecycle,不要放进 Compose。是否收费、价格、平台及具体效果资料未提供。