Databinding
Databinding 是一个实现数据和UI绑定的框架,支持双向绑定。有了 Data Binding,在Android中也可以很方便的实现MVVM开发模式。
通过 Data Binding , 我们可以通过声明式布局以精简的代码来绑定应用程序逻辑和布局,这样我们可以精简大量view相关操作的代码了,如 findViewById()、setText(),setVisibility(),setEnabled() 或 setOnClickListener() 等。
Databinding的入门与原理分析
可以自行百度或者查看这篇博文 juejin.cn/post/704007…
viewBinding
viewBinding 会为每个 XML 布局文件生成一个绑定类。绑定类的实例包含在相应布局xml文件中具有 ID 的所有视图的直接引用。通过xml绑定,可以更轻松地编写可与视图交互的代码,所以不用再写一大堆的findviewbyid和定义一大堆的view变量了。
优点:
- Null 安全:由于视图绑定会创建对视图的直接引用,因此不存在因视图 ID 无效而引发 Null 指针异常的风险。
- 类型安全:每个绑定类中的字段均具有与它们在 XML 文件中引用的视图相匹配的类型。这意味着不存在发生类转换异常的风险。
- 更快的编译速度:视图绑定不需要处理注释,因此编译时间更短。
- 易于使用:视图绑定不需要特别标记的 XML 布局文件,因此在应用中采用速度更快。在模块中启用视图绑定后,它会自动应用于该模块的所有布局。
不足:
- 视图绑定不支持布局变量或布局表达式,因此不能用于直接在 XML 布局文件中声明动态界面内容。
- 视图绑定不支持双向数据绑定。
Viewbinding的原理
编译时通过gradle插件扫描布局文件生成相应的绑定类——class文件,绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用,在Activity中初始化该对象,对控件进行调用。
ViewBinding和DataBinding的关系
viewbinding 相当于Databinding 的一个子集,两者都能做binding UI layouts的操作,但是databinding还支持一些额外的功能 如双向绑定,xml中使用变量等。
有databinding为什么还要出现viewbinding?
Databinding的不足:
- 因为需要编译期间annotation处理,所以需要花费更长的编译时间。
- Databinding 会增大包的体积。一个简单的demo databinding比viewbinding大50kb左右
- Databinding支持数据双向绑定,但是用起来很容易陷入歧途,即在xml中加入过多的逻辑判断,这对代码维护是恐怖的,如果java和xml都写逻辑判断,后期维护起来是非常痛苦的