0Pricing
Android Academy · 课时

重组详解

了解 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 remember 和 mutableStateOf 管理状态
  2. 重组详解
  3. 状态提升
  4. rememberSaveable
← 返回 Android Academy