Android:DataBinding 和 ViewBinding 的区别

Posted

技术标签:

【中文标题】Android:DataBinding 和 ViewBinding 的区别【英文标题】:Android : Difference between DataBinding and ViewBinding 【发布时间】:2020-01-22 05:52:56 【问题描述】:

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

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

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

【问题讨论】:

粗略地说,视图绑定是数据绑定的一个子集。您没有获得数据绑定表达式,但您确实获得了生成的绑定类,您可以使用它来处理 findViewById() 调用,并为您提供对布局中小部件的类型安全和空值安全访问。 @CommonsWare 如果 DataBinding 可以完成所有这些以及更多操作,那么使用 ViewBinding 有什么优势? @IgorGanapolsky:数据绑定减慢了构建过程。视图绑定的构建过程并没有那么糟糕。 【参考方案1】:

根据official docs:

视图绑定

仅将视图绑定到代码。

数据绑定

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

三个重要的区别

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

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

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

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

【讨论】:

ViewBinding最大的优势是什么? 速度和效率 好的,建议我一件事。我应该使用什么?还是我应该同时使用两者?我说的是任何一般项目。是的,我想使用 MVVM 结构。请提出建议。 您可以使用 VIEWBINDING 有效地替换 findviewbyid()。但是,如果您的项目更复杂,并且您需要添加“糖”和功能(例如将数据绑定到视图、绑定适配器等),请使用 DATABINDING。 您也不需要同时使用两者。如果您使用的是DATABINDING,则无需添加VIEWBINDING【参考方案2】:

ViewBinding VS 数据绑定

这就是我想一起解释ViewBindingDataBinding 的原因。

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

那么,这可能会引出一个问题

“那么我们就使用DataBinding,因为它听起来更花哨!”

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

For more detail read this article

【讨论】:

【参考方案3】:

按照官方定义,

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

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

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

    View Binding 库比 Data Binding 库快,因为它是 不使用下面的注释处理器,当涉及到 编译时速度 View Binding 更高效。

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

    Data Binding 库与 Observable Data 对象一起工作,但你不需要 当底层数据发生变化时,不必担心刷新 UI。

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

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

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

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

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

【讨论】:

以上是关于Android:DataBinding 和 ViewBinding 的区别的主要内容,如果未能解决你的问题,请参考以下文章

DSL 元素 'android.dataBinding.enabled' 已过时,已替换为 'android.buildFeatures.dataBinding'

android dataBinding详解

Android DataBinding笔记

在android studio2.0中,配置databinding问题

Android databinding不存在

Android基础——框架模式MVVM之DataBinding的实践