Android : Difference between DataBinding and ViewBinding

自从 Jetpack 发布以来,我们一直在使用 数据绑定。 Android 文档显示 视图绑定是在 Android Studio 3.6 Canary 11 + .中添加的

我阅读了文档,但它的外观类似于 数据绑定。

有人能解释一下这两个概念之间的区别吗?

54162 次浏览

根据 官方文件:

视图绑定

只将视图绑定到代码。

数据绑定

Binding data (from code) to views + ViewBinding (Binding views to code)

There are three important differences

  1. 使用视图绑定,布局不需要布局标记

  2. 不能使用 viewbind 将布局与 xml 中的数据绑定在一起 (没有绑定表达式,没有 BindingAdapter,也没有带视图绑定的双向绑定)

  3. The main advantages of viewbinding are speed and efficiency. It has a shorter build time because it avoids the overhead and performance issues associated with databinding due to annotation processors affecting databinding's build time.

简而言之,没有什么视图绑定可以做到数据绑定不能做的事情(尽管代价是更长的构建时间) ,而且有很多数据绑定可以做到视图绑定不能做的事情

视图绑定 VS 数据绑定

这就是为什么我想一起解释 ViewBindingDataBindingenter image description here

As you can see, ViewBinding is a sort of subset of DataBinding libraries which means ViewBinding and DataBiding can do the same jobs in terms of binding layouts. And it would also mean with DataBinding, you might not need ViewBinding cause it will do what ViewBinding is supposed to do and also provide a bit of an extra functionalities such as 2way binding, and using variables in XML files.

这就引出了一个问题

"Then let's just use DataBinding as it sounds much more fancy!"

等一下。尽管听起来很花哨,但它是一个相当沉重的加载库,可能会导致较长的编译时间。因此,如果您不打算只使用 DataBinding功能,那么最好考虑 ViewBinding,因为它在构建时间和 apk 大小方面确实有一些优势。

欲了解更多细节,请阅读本文

根据官方定义,

视图绑定允许我们更容易地编写与视图交互的代码。一旦在模块中启用了视图绑定,它将为该模块中存在的每个 XML 布局文件生成一个绑定类。绑定类的实例包含对相应布局中具有 ID 的所有视图的直接引用。

The Data Binding Library is a support library that allows you to bind UI components in your layouts to data sources in your app using a declarative format rather than programmatically.

视图绑定和数据绑定

  1. View Binding library is faster than Data Binding library as it is not utilising annotation processors underneath, and when it comes to 编译速度视图绑定更有效。

  2. 视图绑定的唯一功能是将视图绑定到 虽然数据绑定提供了一些更多的选项,如绑定 表达式,它允许我们编写连接的表达式 变量添加到布局中的视图。

  3. 数据绑定库可以处理可观察数据对象,而您不能 have to worry about refreshing the UI when underlying data changes.

  4. Data Binding library provides us with Binding Adapters.

  5. 数据绑定库为我们提供了双向数据绑定,这就是 一种将对象绑定到 xml 布局的技术,这样, 对象和布局可以相互发送数据。

要详细了解视图绑定和数据绑定,您可以阅读这些文章,

Https://medium.com/geekculture/android-viewbinding-over-findviewbyid-389401b41706

Https://anubhav-arora.medium.com/android-view-binding-v-s-data-binding-5862a27524e9

ViewBinding 似乎足够用于更小/更简单的项目。例如,如果您刚刚开始学习 Android Kotlin,使用 ViewBinding 可以减少您需要编写的重复代码的数量——而不是尝试使用 findViewById函数获取对视图对象的引用,您可以简单地使用 bind object 属性来访问任何具有声明 ID 的 XML 视图对象。