Android:DataBinding和ViewBinding之间的区别

时间:2019-09-21 13:30:33

标签: android data-binding android-databinding android-viewbinding

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

我是真实的文档,但其外观与 DataBinding类似。

谁能解释我们如何区别这两个概念?

3 个答案:

答案 0 :(得分:8)

它们之间的区别在于如何初始化,

//DataBinding
binding = DataBindingUtil.setContentView(this, R.layout.activity_main) as ActivityMainBinding
//ViewBinding
binding = ActivityMainBinding.inflate(layoutInflater)

是否对尺寸有任何影响

我开始在它们之间构建 APK,进行一些比较(注意:停用 minify),如果您想查看我构建的内容,请访问 my simple project here 结果 APK 大小

  Databinding = 2670 kb  
  ViewBinding = 2620 kb

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

╔═══════════════╦═══════╦═══════════════╦═════════╗
║ Databinding   ║ Size  ║ ViewBinding   ║ Size    ║
╠═══════════════╬═══════╬═══════════════╬═════════╣
║ androidx      ║       ║ androidx      ║         ║
║ --databinding ║ 72 Kb ║ --viewbinding ║ 275 B   ║
║ --viewbinding ║ 275 B ║               ║         ║
╚═══════════════╩═══════╩═══════════════╩═════════╝

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

答案 1 :(得分:1)

根据官方文档@ https://developer.android.com/topic/libraries/view-binding,存在三个重要区别

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

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

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

答案 2 :(得分:0)

根据官方定义,

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

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

差异视图绑定和数据绑定

  1. 视图绑定库比数据绑定库快 不使用下面的注释处理器,当涉及到 编译时速度 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-v-s-data-binding-5862a27524e9