Jetpack compose 文档表示,如果所有输入稳定且未更改,它可以跳过重组。稳定类型的定义是这样的......
稳定类型必须遵守以下合同:
- 对于相同的两个实例,两个实例的 equals 结果将永远相同。
- 如果该类型的公共属性发生变化,Composition 将会收到通知。
- 所有公共财产类型也都很稳定。
我无法清楚地理解这一点。有人可以向我解释一下 compose 如何检查类型是否稳定吗?我可以理解如果 compose 确定类型是稳定的,那么它将使用 equals 方法检查是否相等。但是如何说一个类是否稳定,以便我们能够尽可能地理解和支持智能重组呢?
我试着玩了一下,发现了以下内容。
This data class Student is not stable, even if I pass the same instance again, its recomposing
data class Student(
var id:Int=1,
var name:String="Anonymous")
Run Code Online (Sandbox Code Playgroud)
然而,当我们再次传递相同的实例时,以下类被视为稳定的并且有利于智能重组
This class is stable when all the public parameters are changed to val
data class Student(
val id:Int=1,
val name:String="Anonymous")
Run Code Online (Sandbox Code Playgroud)
所以,我可以理解所有公共属性都应该是不可变的。但令我困惑的是,下面的类也被视为稳定的并且支持智能重组。为什么?
This MainActivityVM class is considered Stable when passing like
@Composable
fun StudentList(viewModel:MainActivityVM){
...
}
class MainActivityVM …
Run Code Online (Sandbox Code Playgroud)