98

自 Jetpack 发布以来,我们一直在使用DataBinding 。Android 文档表明在Android Studio 3.6 Canary 11+中添加了ViewBinding 。

我阅读了文档,但它看起来类似于DataBinding。

谁能解释这两个概念之间有什么区别?

4

3 回答 3

144

根据官方文档

视图绑定

仅将视图绑定到代码。

数据绑定

将数据(来自代码)绑定到视图 + ViewBinding(将视图绑定到代码)

有三个重要的区别

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

  2. 您不能使用视图绑定将布局与 xml 中的数据绑定(没有绑定表达式,没有 BindingAdapters,也没有与视图绑定的双向绑定)

  3. 视图绑定的主要优点是速度和效率。它具有更短的构建时间,因为它避免了与数据绑定相关的开销和性能问题,因为注释处理器会影响数据绑定的构建时间。

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

于 2019-11-20T05:32:35.203 回答
29

ViewBinding VS 数据绑定

这就是我想一起解释的ViewBinding原因DataBinding在此处输入图像描述

如您所见,ViewBinding它是库的一种子集,DataBinding这意味着ViewBinding并且DataBiding可以在绑定布局方面执行相同的工作。这也意味着DataBinding,您可能不需要ViewBinding因为它会做ViewBinding应该做的事情,并且还提供一些额外的功能,例如 2way 绑定和在XML文件中使用变量。

然后,这可能会导致一个问题

“那我们就用DataBinding它听起来更花哨!”

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

有关更多详细信息,请阅读这篇文章

于 2021-01-14T20:02:19.870 回答
8

按照官方定义,

视图绑定使我们能够更轻松地编写与视图交互的代码。在模块中启用视图绑定后,它会为该模块中存在的每个 XML 布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。

数据绑定库是一个支持库,它允许您使用声明性格式而不是编程方式将布局中的 UI 组件绑定到应用程序中的数据源。

视图绑定和数据绑定的区别

  1. View Binding 库比 Data Binding 库更快,因为它没有使用下面的注释处理器,并且在编译时速度方面 View Binding 更有效。

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

  3. Data Binding 库与 Observable Data 对象一起使用,您不必担心在底层数据更改时刷新 UI。

  4. 数据绑定库为我们提供了绑定适配器。

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

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

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

https://anubhav-arora.medium.com/android-view-binding-vs-data-binding-5862a27524e9

于 2021-05-27T12:50:11.507 回答