重组详解
了解 Compose 如何更新用户界面
重组详解 是 CoddyKit 上的免费 Android Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Android Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Android Academy 课程共包含 4 节课。
什么是重新组合?
重新组合是指当可组合项读取的状态发生变化时,Compose 重新运行可组合函数以更新界面。这使屏幕始终与数据保持同步。
由状态读取触发
Compose 会跟踪哪些可组合项读取了哪些状态。当状态值发生变化时,只有读取该状态的可组合项会被安排重新组合。
智能且有选择性
重新组合具有选择性:Compose 会尽量减少重新运行的内容。某个状态发生变化不会重绘整个屏幕,只会重绘依赖该状态的部分。
跳过
如果可组合项的输入没有变化,Compose 可以完全跳过重新运行它。即使界面很复杂,这也能让重新组合保持低开销。
可组合项会频繁运行
由于重新组合可能频繁发生,且顺序不固定,因此您的可组合项必须能够安全地重复运行。在状态相同的情况下,多次调用应产生相同的界面。
避免副作用
不要直接在可组合项主体中执行副作用(网络请求、写入文件、修改共享变量)。这些操作可能在每次重新组合时运行。请改用状态和效果 API。
// BAD: runs on every recomposition
@Composable
fun Bad() {
saveToDatabase()
Text("Hi")
}与执行顺序无关
您不能依赖可组合项按特定顺序或在特定线程上运行。请将每次调用视为独立操作。正是这种自由让 Compose 能够进行积极优化。
读取与不读取
只有读取某个状态的可组合项,才会在该状态变化时重新组合。如果 Text 从未读取 count,那么修改 count 不会影响它。
@Composable
fun Demo() {
var count by remember { mutableStateOf(0) }
Text("Static") // never recomposes from count
Text("Count: $count") // recomposes when count changes
Button(onClick = { count++ }) { Text("+") }
}需要避免的重新组合循环
在组合期间(而不是事件内部)写入状态,可能导致无限重新组合循环。请仅在 onClick 等回调中更新状态,绝不要直接在主体中更新。
这一切感觉像是自动完成的
从您的角度看,重新组合是自动的。您将界面声明为状态的函数,在回调中修改状态,Compose 会负责重新运行正确的可组合项。
整合运用
这个计数器演示了重新组合:点击后 count 发生变化,Compose 重新运行读取它的 Text,于是显示新的数字。
@Composable
fun Counter() {
var count by remember { mutableStateOf(0) }
Button(onClick = { count++ }) {
Text(text = "Count: $count")
}
}快速检查
Compose 什么时候会重新组合可组合项?
回顾
重新组合要点:
- 状态变化会触发读取该状态的可组合项重新运行。
- 重新组合具有选择性,并且可以跳过未发生变化的可组合项。
- 可组合项必须没有副作用,并且能够按任意顺序安全地重复运行。
常见问题解答
「重组详解」课时是免费的吗?
是的 — 「重组详解」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Android Academy 课程的其余内容,请升级到 CoddyKit PRO。 Android Academy 课程共包含 4 节课。
「重组详解」这节课中我会学到什么?
了解 Compose 如何更新用户界面 你通过在浏览器中直接运行的动手代码来练习 Android Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Android Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Android Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「重组详解」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Android Academy 课中编写并运行代码吗?
能。每节 Android Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。