基本原理: 开始编译——>处理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方法。