DataBinding和ViewBinding整理

两者都是 Android 提供的视图绑定技术,用于减少 findViewById 的使用并提高代码的可读性和效率,但它们适用的场景和功能存在一定区别。

1. 功能对比

特性DataBindingViewBinding
主要目的数据绑定(Data Binding)和双向绑定简化视图绑定(View Binding)
XML 支持需要在布局文件中使用 <layout> 标签不需要修改布局文件
绑定表达式支持在 XML 中使用 @{} 绑定表达式,如 @{viewModel.text}不支持绑定表达式
双向绑定支持双向绑定,使用 @= 来绑定变量和视图值不支持双向绑定
生成的类自动生成 Binding 类,如 ActivityMainBinding,支持数据绑定自动生成 Binding 类,如 ActivityMainBinding
初始化方式使用 DataBindingUtilBinding.inflate 初始化使用 Binding.inflate 初始化
性能功能更强大,可能稍慢(需要编译时处理)更轻量,运行效率更高
依赖项需要在 build.gradle 中启用 dataBinding需要在 build.gradle 中启用 viewBinding

2. 使用场景对比

场景适合 DataBinding适合 ViewBinding
复杂的 MVVM 项目需要与 ViewModel 配合,支持数据绑定和双向绑定不推荐,无法直接支持数据绑定
简单布局绑定可以使用,但显得复杂更适合,快速绑定布局文件中的视图
动态更新 UI支持直接在 XML 中使用表达式绑定 ViewModel 数据需要手动更新视图
性能敏感场景功能强大,但性能稍低更高效,适合性能敏感的场景

3. 配置方式

DataBinding

build.gradle 中启用:

android {
    buildFeatures {
        dataBinding true
    }
}

使用时需要在布局文件外层添加 <layout> 标签:

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="viewModel"
            type="com.example.MyViewModel" />
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{viewModel.text}" />
    </LinearLayout>
</layout>

初始化绑定类:

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setViewModel(myViewModel);

ViewBinding

build.gradle 中启用:

android {
    buildFeatures {
        viewBinding true
    }
}

无需修改布局文件,直接使用:

ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
binding.textView.setText("Hello, World!");

4. 优缺点总结

DataBinding
  • 优点
    • 支持复杂的数据绑定和双向绑定,简化 ViewModel 和 View 的交互。
    • 强大的表达式支持,减少样板代码。
  • 缺点
    • 编译时间稍长。
    • 使用门槛较高,简单场景可能显得复杂。
ViewBinding
  • 优点
    • 简单易用,零学习成本。
    • 更高效的视图绑定方式。
  • 缺点
    • 只能用来绑定视图,不能处理数据绑定。
    • 需要手动更新视图和数据的绑定逻辑。

5. 何时选择哪种技术?

  • 选择 DataBinding:

    • 项目采用 MVVM 架构。
    • 需要双向绑定或在布局中使用表达式。
    • 对性能要求不敏感,追求功能丰富。
  • 选择 ViewBinding:

    • 项目简单或基于其他架构(如 MVP、MVC)。
    • 只需要视图绑定,不需要数据绑定功能。
    • 需要轻量级、高性能的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值