1
Image(painter = painterResource(id = R.mipmap.ic_launcher),
contentDescription = "",
modifier = Modifier.size(84.dp)
)
2 Compose函数在重组的时候是否执行的判断条件:
2.1 Compose对函数的参数进行的都是结构性比较(kotlin中的 == java的equals)
2.2 2.1的前提是参数对象都是不可变的类型,稳定的类型(比如 变量都是val),如果对象被认定为是不可靠的,不管对象有没有改变,都会直接recompose。
2.3 保证一个类是稳定的方式
第一种方式
手动给类增加@Stable注解。属性可以使用var
第二种方式
对所有公开的属性都使用
var a by mutableStateOf(false)
也就是保证所有的公开属性改变的时候能被追踪,触发recompose
(注意点:即使所有的属性都能被追踪,如果属性是另一个对象,这个对象是不稳定的,那么也会导致当前对象是不稳定的)
@Stable 注解的要求是:
1 现在相等将来也相等(等于的比较要一直相等)
2 当公开属性改变的时候,能通知到用这个属性的Composition
3 公开属性都是稳定的 / 可靠的属性
但是Compsose重组的时候之能自动校验第二条,第1,3条没办法实现,所以需要我们自己来保证。
3 额外知识点 Hashmap()
我们都知道Hasmap 的key是跟 key的hashcode 和 equals 来存储的。
如果我们的key是一个对象,对象的hashcode的方法被重写,那么我们改变对象的属性,就有可能导致hashcode被改变。导致我们认为一样的key,实际存储的时候变的不一致。