四、Jetpack源码解析(DataBinding)

71 阅读1分钟

image.png image.png image.png

image.png

image.png

基本原理: 开始编译——>处理layout文件——>解析表达式——>java编译——>解析依赖——>找到setter 特点:

1、0反射 2、findViewById需要遍历整个ViewGroup,现在只需要1次 3、使用标记位来检验更新 4、数据改变在下一次批量更新时才会触发操作 5、缓存表达式,如: a?(a?c:b):e f?(b?c:d):f

表达式含有例子
&、|、^二元表达式
+、-、!、~一元表达式
>>、>>>、<<移位
==、>、<、>=、<=比较
Instanceof
Grouping
character、String、numeric、null文字
Cast
方法调用
Filed访问
Array访问[]
?:三元
this、super、new、显示泛型调用
@{user.displayName??user.lastName}
等同于@{user.displayName!=null?user.displayName:user.lastName}
空合并运算符
@=双向绑定

binding.executePendingBindings(); 意思是:当数据改变时,binding会在下一帧去改变数据,如果我们需要立即改变,就去调用executePendingBindings方法。