写点什么

Compose 可组合项的生命周期

用户头像
Changing Lin
关注
发布于: 3 小时前
Compose 可组合项的生命周期

1.生命周期概览

一个组合将描述应用的界面,并通过运行可组合项来生成。组合是描述界面的可组合项的树结构。

重组是指 Jetpack Compose 重新执行可能因状态更改而更改的可组合项,然后更新组合以反映所有更改。

组合只能通过初始组合生成且只能通过重组进行更新。重组是修改组合的唯一方式。

可组合项的生命周期通过以下事件定义:进入组合执行 0 次或多次重组,然后退出组合

重组通常由对 State<T> 对象的更改触发。Compose 会跟踪这些操作,并运行组合中读取该特定 State<T> 的所有可组合项以及这些操作调用的无法跳过的所有可组合项。

2.组合中可组合项的剖析

组合中可组合项的实例由其调用点进行标识。

调用点是调用可组合项的源代码位置。这会影响其在组合中的位置,因此会影响界面树。

2.1 添加额外信息以促进智能重组

多次调用同一可组合项也会多次将其添加到组合中。

可以使用 Compose 来告诉运行时,您要使用哪些值来标识树的给定部分:key 可组合项。

通过调用带有一个或多个传入值的键可组合项来封装代码块,这些值将被组合以用于在组合中标识该实例。

key 的值不必是全局唯一的,只需要在调用点处调用可组合项的作用域内确保其唯一性即可。

2.2 如果输入未更改,则跳过

如果组合中已有可组合项,当所有输入都处于稳定状态且没有变化时,可以跳过重组。

稳定类型必须符合以下协定:

  • 对于相同的两个实例,其 equals 的结果将始终相同。

  • 如果类型的某个公共属性发生变化,组合将收到通知。

  • 所有公共属性类型也都是稳定。

有这样一些归入此协定的重要通用类型,即使未使用 @Stable 注解来显式标记为稳定的类型,Compose 编译器也会将其视为稳定的类型。

  • 所有基元值类型:BooleanIntLongFloatChar 等。

  • 字符串

  • 所有函数类型 (lambda)

Compose 的 MutableState 类型是一种众所周知稳定但可变的类型。如果 MutableState 中保留了值,状态对象整体会被视为稳定对象,因为 State 的 .value 属性如有任何更改,Compose 就会收到通知。

当作为参数传递到可组合项的所有类型都很稳定时,系统会根据可组合项在界面树中的位置来比较参数值,以确保相等性。如果所有值自上次调用后未发生变化,则会跳过重组。

发布于: 3 小时前阅读数: 4
用户头像

Changing Lin

关注

获得机遇的手段远超于固有常规之上~ 2020.04.29 加入

我能做的,就是调整好自己的精神状态,以最佳的面貌去面对那些未曾经历过得事情,对生活充满热情和希望。

评论

发布
暂无评论
Compose 可组合项的生命周期