Android compose中的附带效应-人话

embedded/2025/3/21 5:44:18/

以下是这些 Compose API 的总结

API 名称作用典型使用场景注意事项
LaunchedEffect在 Composable 中启动协程任务,协程生命周期与组件绑定。一次性异步操作(如网络请求、动画)、响应 key 变化重启任务。key 参数变化时会取消旧协程并启动新协程。
rememberCoroutineScope获取与当前组件绑定的协程作用域,手动控制协程启动时机。用户交互触发的异步任务(如点击按钮发起请求)。协程作用域在组件退出时自动取消所有子协程。
rememberUpdatedState在重组中保持状态的最新值,避免闭包捕获旧值。长时间任务中访问最新状态(如延迟回调、动画)。通常与 LaunchedEffect 或协程结合使用。
DisposableEffect执行需要清理的副作用操作(如注册监听器),组件退出时自动清理。注册/反注册监听、申请/释放资源(传感器、广播、文件句柄)。必须返回 onDispose { ... }
SideEffect在重组后执行与 UI 无关的副作用(如修改全局状态)。更新 Activity 标题、同步非 Compose 状态(全局变量、第三方库)。无生命周期绑定,仅在组件存在时执行。
produceState将异步数据流转换为 Compose 状态,自动管理协程。网络请求、监听数据库/Flow、传感器数据流。返回 State<T>,依赖 key 变化重启任务。
derivedStateOf派生新状态,仅在依赖项变化时重新计算(性能优化)。高频状态计算的缓存(如滚动位置判断、表单验证)。remember 包裹,避免每次重组重新创建。
snapshotFlow将 Compose 状态转换为 Flow,响应状态变化发射数据。将状态变化桥接到 Flow 处理(如防抖、批量操作)。需在协程中收集(如 LaunchedEffectcollectAsState)。

关键对比

  • 异步任务管理

    • LaunchedEffect:自动启动协程,适合一次性任务。
    • rememberCoroutineScope:手动控制协程启动时机。
    • produceState:将异步数据流绑定为状态。
  • 副作用生命周期

    • DisposableEffect:需要清理的操作(如注册监听)。
    • SideEffect:无需清理的简单操作(如修改标题)。
  • 状态派生与优化

    • derivedStateOf:减少高频状态计算。
    • snapshotFlow:将状态桥接到 Flow 处理流式逻辑。
  • 状态保鲜

    • rememberUpdatedState:确保闭包中访问最新值。

使用口诀

  • 要启动协程任务LaunchedEffect(自动) / rememberCoroutineScope(手动)
  • 要绑定资源生命周期DisposableEffect
  • 要同步外部状态SideEffect
  • 要异步转同步状态produceState
  • 要优化高频计算derivedStateOf
  • 要状态转流处理snapshotFlow
  • 要保鲜闭包状态rememberUpdatedState

http://www.ppmy.cn/embedded/174345.html

相关文章

Git——分布式版本控制工具使用教程

本文主要介绍两种版本控制工具——SVN和Git的概念&#xff0c;接着会讲到Git的安装&#xff0c;Git常用的命令&#xff0c;以及怎么在Vscode中使用Git。帮助新手小白快速上手Git。如果想直接上手用Vscode操作远程仓库则直接看7和9即可&#xff01; 目录 1. SVN和Git介绍 1.1 …

第一节:关于数组的算法(python版)

目录 一、存储方式 二、二分查找 三&#xff1a;数组的算法操作&#xff1a;双指针算法 四、数组操作&#xff1a;滑动窗口 视频讲解地址&#xff1a;动态-哔哩哔哩 一、存储方式 在python中的list本质是动态数组&#xff0c;支持自动扩容。还有一个numpy数组&#xff0c;…

电脑如何录屏

以下是电脑录屏的常用方法总结&#xff0c;涵盖系统自带工具、第三方软件及进阶功能&#xff0c;结合不同场景需求推荐最佳方案&#xff1a; 一、系统自带工具 Xbox Game Bar&#xff08;Windows 10/11&#xff09; 操作步骤&#xff1a;按 WinG 打开游戏栏 → 点击录制按钮&am…

内网安全-横向移动Kerberos 攻击SPN 扫描WinRMWinRSRDP

1.WinRM&WinRS 条件&#xff1a; 双方开启winrm winrs服务 2008版本以上默认开启&#xff0c;win 7默认关闭 检测使用cs内置端口扫描5985开放情况 进行连接 winrs -r:http://192.168.93.30:5985 -u:administrator -p:Whoami2021 whoami 2.内网-spn shell setspn -T …

“消失的中断“

“消失的中断” 1. 前言 在嵌入式开发过程中&#xff0c;中断必不可少。道友们想必也经常因为中断问题头疼不已&#xff0c;今天来说说一个很常见的问题&#xff0c;“消失的中断”。最近项目在使用第三方MCAL的时候&#xff0c;就遇到了I2C中断丢失的问题&#xff0c;排查起…

【sklearn 03】逻辑回归、决策树、支持向量机

逻辑回归、决策树、支持向量机 - 逻辑回归 logistics regression&#xff08;逻辑回归&#xff09;算法是经典的分类算法&#xff0c;基本思想是构造一个概率的拟合函数。 决策树 决策树的基本思想是根据样例去推断其背后的树形知识表征 支持向量机 支持向量机SVM(support…

奇瑞汽车智能化战略发布,开启“四大平权”新时代

3月18日&#xff0c;奇瑞汽车智能化战略发布会顺利召开。 据「TMT星球」了解&#xff0c;活动聚焦“油电同智 全球同行”&#xff0c;正式发布奇瑞集团智能化战略规划&#xff0c;并集中展示猎鹰智驾、人形机器人、智舱大模型等最新核心技术成果。 作为中国汽车智能化领域的先…

C#:深入理解Thread.Sleep与Task.Delay

1.核心区别概述 特性Thread.SleepTask.Delay阻塞类型同步阻塞当前线程异步非阻塞&#xff0c;释放线程适用场景同步代码中的简单延时异步编程中的非阻塞等待资源消耗占用线程资源&#xff08;线程挂起&#xff09;不占用线程&#xff08;通过计时器回调&#xff09;精度依赖操…