Compose 可组合项的生命周期
1.生命周期概览
一个组合将描述应用的界面,并通过运行可组合项来生成。组合是描述界面的可组合项的树结构。
重组是指 Jetpack Compose 重新执行可能因状态更改而更改的可组合项,然后更新组合以反映所有更改。
组合只能通过初始组合生成且只能通过重组进行更新。重组是修改组合的唯一方式。
可组合项的生命周期通过以下事件定义:进入组合,执行 0 次或多次重组,然后退出组合。
重组通常由对 State<T> 对象的更改触发。Compose 会跟踪这些操作,并运行组合中读取该特定 State<T> 的所有可组合项以及这些操作调用的无法跳过的所有可组合项。
2.组合中可组合项的剖析
组合中可组合项的实例由其调用点进行标识。
调用点是调用可组合项的源代码位置。这会影响其在组合中的位置,因此会影响界面树。
2.1 添加额外信息以促进智能重组
多次调用同一可组合项也会多次将其添加到组合中。
可以使用 Compose 来告诉运行时,您要使用哪些值来标识树的给定部分:key 可组合项。
通过调用带有一个或多个传入值的键可组合项来封装代码块,这些值将被组合以用于在组合中标识该实例。
key 的值不必是全局唯一的,只需要在调用点处调用可组合项的作用域内确保其唯一性即可。
2.2 如果输入未更改,则跳过
如果组合中已有可组合项,当所有输入都处于稳定状态且没有变化时,可以跳过重组。
稳定类型必须符合以下协定:
对于相同的两个实例,其
equals
的结果将始终相同。如果类型的某个公共属性发生变化,组合将收到通知。
所有公共属性类型也都是稳定。
有这样一些归入此协定的重要通用类型,即使未使用 @Stable
注解来显式标记为稳定的类型,Compose 编译器也会将其视为稳定的类型。
所有基元值类型:
Boolean
、Int
、Long
、Float
、Char
等。字符串
所有函数类型 (lambda)
Compose 的 MutableState 类型是一种众所周知稳定但可变的类型。如果 MutableState 中保留了值,状态对象整体会被视为稳定对象,因为 State 的 .value 属性如有任何更改,Compose 就会收到通知。
当作为参数传递到可组合项的所有类型都很稳定时,系统会根据可组合项在界面树中的位置来比较参数值,以确保相等性。如果所有值自上次调用后未发生变化,则会跳过重组。
版权声明: 本文为 InfoQ 作者【Changing Lin】的原创文章。
原文链接:【http://xie.infoq.cn/article/a60b8db5c53b868cf4f3f64a2】。文章转载请联系作者。
评论