Android : DataBinding 和 ViewBinding 的区别

Android : Difference between DataBinding and ViewBinding

我们正在使用 DataBinding since Jetpack release. Android documentation indicates that ViewBinding 添加到 Android Studio 3.6 Canary 11+。

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

谁能解释一下这两个概念有什么区别?

根据official docs

视图绑定

仅将视图绑定到代码。

数据绑定

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

存在三个重要区别

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

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

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

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

ViewBinding VS Databinding

这就是为什么我想把ViewBindingDataBinding放在一起解释的原因。

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

那么,这就引出了一个问题

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

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

For more detail read this article

根据官方定义,

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

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

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

  1. 视图绑定库比数据绑定库更快 不使用下面的注释处理器,当涉及到 编译时间速度 View Binding 效率更高

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

  3. Data Binding 库与 Observable Data 对象一起工作,你不 必须担心基础数据更改时刷新 UI。

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

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

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

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

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