Android:DataBinding 和 ViewBinding 之间的区别

Pra*_*ani 75 data-binding android android-databinding android-jetpack android-viewbinding

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

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

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

Seg*_*aab 106

根据官方文档

视图绑定

仅将视图绑定到代码。

数据绑定

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

有三个重要区别

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

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

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

简而言之,viewbinding 没有什么是 databinding 不能做的(尽管以更长的构建时间为代价),并且有很多 databinding 可以做而 viewbinding 不能做的

  • ViewBinding最大的优点是什么? (3认同)
  • 速度和效率 (3认同)
  • 您也不需要同时使用两者。如果使用DATABINDING,则无需添加VIEWBINDING (3认同)
  • 您可以使用 VIEWBINDING 有效地替换 findviewbyid() 。但是,如果您的项目更复杂并且需要添加“糖”和功能(例如将数据绑定到视图、绑定适配器等),请使用 DATABINDING。 (2认同)

akh*_*707 17

视图绑定 VS 数据绑定

这是为什么我想解释ViewBindingDataBinding在一起。 在此处输入图片说明

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

那么,这可能会导致一个问题

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

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

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


Anu*_*hav 13

按照官方的定义,

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

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

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

  1. 视图绑定库比数据绑定库更快,因为它没有利用底层的注释处理器,并且在编译时间速度方面,视图绑定更高效。

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

  3. 数据绑定库与可观察数据对象一起使用,您不必担心底层数据更改时刷新 UI。

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

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

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

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

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


Har*_*r S 10

它们之间的不同之处在于如何初始化,

//DataBinding
binding = DataBindingUtil.setContentView(this, R.layout.activity_main) as ActivityMainBinding
//ViewBinding
binding = ActivityMainBinding.inflate(layoutInflater)
Run Code Online (Sandbox Code Playgroud)

这对尺寸有影响吗

我开始在它们之间构建 APK,进行一些比较(注意:停用 minify),如果您想查看我构建的内容,请访问我的简单项目 Result APK size

  Databinding = 2670 kb  
  ViewBinding = 2620 kb
Run Code Online (Sandbox Code Playgroud)

它们之间有不同大小的 apk 50kb 并开始使用分析 APK 来检查它们的每个部分,我发现在 androidx 目录中的 classdex 中 DataBinding 和 ViewBinding 生成相同的目录,除了这个

???????????????????????????????????????????????????
? Databinding   ? Size  ? ViewBinding   ? Size    ?
???????????????????????????????????????????????????
? androidx      ?       ? androidx      ?         ?
? --databinding ? 72 Kb ? --viewbinding ? 275 B   ?
? --viewbinding ? 275 B ?               ?         ?
???????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

请记住,这是一个简单的项目,也许如果您在复杂的应用程序上实现它。它对您的大小 APK/AAB(Android 应用程序包)产生巨大影响。