自 Jetpack 发布以来,我们一直在使用DataBinding 。Android 文档表明在Android Studio 3.6 Canary 11+中添加了ViewBinding 。
我阅读了文档,但它看起来类似于DataBinding。
谁能解释这两个概念之间有什么区别?
自 Jetpack 发布以来,我们一直在使用DataBinding 。Android 文档表明在Android Studio 3.6 Canary 11+中添加了ViewBinding 。
我阅读了文档,但它看起来类似于DataBinding。
谁能解释这两个概念之间有什么区别?
根据官方文档:
仅将视图绑定到代码。
将数据(来自代码)绑定到视图 + ViewBinding(将视图绑定到代码)
有三个重要的区别
使用视图绑定,布局不需要布局标签
您不能使用视图绑定将布局与 xml 中的数据绑定(没有绑定表达式,没有 BindingAdapters,也没有与视图绑定的双向绑定)
视图绑定的主要优点是速度和效率。它具有更短的构建时间,因为它避免了与数据绑定相关的开销和性能问题,因为注释处理器会影响数据绑定的构建时间。
简而言之,没有什么视图绑定可以做数据绑定不能做的(尽管代价是更长的构建时间),并且有很多数据绑定可以做视图绑定不能做的事情
ViewBinding VS 数据绑定
这就是我想一起解释的ViewBinding
原因DataBinding
。
如您所见,ViewBinding
它是库的一种子集,DataBinding
这意味着ViewBinding
并且DataBiding
可以在绑定布局方面执行相同的工作。这也意味着DataBinding
,您可能不需要ViewBinding
因为它会做ViewBinding
应该做的事情,并且还提供一些额外的功能,例如 2way 绑定和在XML
文件中使用变量。
然后,这可能会导致一个问题
“那我们就用
DataBinding
它听起来更花哨!”
坚持,稍等。尽管听起来很花哨,但它是一个负载非常重的库,可能会导致更长的编译时间。因此,如果您不打算DataBinding
只使用功能,那么可能会更好地考虑ViewBinding
,因为它在构建时间和 apk 大小方面确实具有一些优势。
按照官方定义,
视图绑定使我们能够更轻松地编写与视图交互的代码。在模块中启用视图绑定后,它会为该模块中存在的每个 XML 布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。
数据绑定库是一个支持库,它允许您使用声明性格式而不是编程方式将布局中的 UI 组件绑定到应用程序中的数据源。
视图绑定和数据绑定的区别
View Binding 库比 Data Binding 库更快,因为它没有使用下面的注释处理器,并且在编译时速度方面 View Binding 更有效。
View Binding 的唯一功能是绑定代码中的视图。虽然数据绑定提供了更多选项,例如绑定表达式,它允许我们编写表达式,将变量连接到布局中的视图。
Data Binding 库与 Observable Data 对象一起使用,您不必担心在底层数据更改时刷新 UI。
数据绑定库为我们提供了绑定适配器。
Data Binding 库为我们提供了双向数据绑定,这是一种将您的对象绑定到 xml 布局的技术,以便对象和布局可以相互发送数据。
要详细了解视图绑定和数据绑定,您可以阅读这些文章,
https://medium.com/geekculture/android-viewbinding-over-findviewbyid-389401b41706
https://anubhav-arora.medium.com/android-view-binding-vs-data-binding-5862a27524e9