Compose 重组学习记录

122 阅读1分钟
1 // Image 如果包含Image组件,对应的区域会触发两次重组
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重组的时候之能自动校验第二条,第13条没办法实现,所以需要我们自己来保证。
  
  
3 额外知识点 Hashmap()
  我们都知道Hasmap 的key是跟 key的hashcode 和 equals 来存储的。
  如果我们的key是一个对象,对象的hashcode的方法被重写,那么我们改变对象的属性,就有可能导致hashcode被改变。导致我们认为一样的key,实际存储的时候变的不一致。