Android dataBinding和viewBinding的区别

本文详细介绍了DataBinding和ViewBinding在Android开发中的优势、区别,包括减少代码量、提高效率、降低错误、增强可读性和兼容性。同时展示了如何在Activity和Fragment中使用这两种数据绑定技术,以及它们在性能上的差异。
摘要由CSDN通过智能技术生成

一、概念介绍:

1、dataBinding的优点有哪些?

1、减少代码量:使用数据绑定可以减少代码量,因为不需要手动更新UI,而是通过数据的变化自动更新UI。
2、提高开发效率:数据绑定可以提高开发效率,因为不需要手动更新UI,开发人员可以更快地完成开发任务。
3、降低出错率:使用数据绑定可以降低出错率,因为不需要手动更新UI,减少了手动操作的机会,从而减少了出错的可能性。
4、提高代码可读性:使用数据绑定可以提高代码可读性,因为数据绑定可以将UI和数据分离,使代码更加清晰易懂。
5、支持MVVM架构:数据绑定是MVVM架构的重要组成部分,可以帮助开发人员更好地实现MVVM架构。
6、支持双向绑定:数据绑定支持双向绑定,可以使UI和数据之间的同步更加方便和快捷。

2、viewBinding的优点有哪些?

1、简化代码:ViewBinding可以自动生成绑定视图的代码,避免手动findViewById的繁琐过程,使代码更加简洁。
2、安全性高:ViewBinding使用类型安全的方式绑定视图,避免了类型转换错误的问题,提高了代码的安全性。
3、性能优化:ViewBinding使用了单例模式,避免了重复创建视图对象的问题,提高了应用的性能。
4、可读性强:ViewBinding使用了命名规范,使代码更加易读易懂,提高了代码的可维护性。
5、兼容性好:ViewBinding可以与DataBinding、LiveData等其他Android Jetpack组件一起使用,提高了应用的兼容性。

3、dataBinding和viewBinding的区别?

dataBinding和viewBinding都是Android中的数据绑定技术,但是它们有以下区别:

1、作用对象不同:dataBinding主要用于将数据绑定到布局文件中的视图上,而viewBinding主要用于将布局文件中的视图绑定到代码中的View对象上。
2、使用方式不同:dataBinding需要在布局文件中添加特定的标记和表达式来实现数据绑定,而viewBinding只需要在代码中使用特定的方法来获取绑定的View对象。
3、支持的最低版本不同:dataBinding需要在Android Studio 1.3及以上版本中使用,而viewBinding需要在Android Studio 3.6及以上版本中使用。
4、功能不同:dataBinding除了数据绑定外,还支持双向绑定、表达式、事件绑定等功能,而viewBinding只支持视图绑定。
5、性能不同:dataBinding在数据绑定时需要进行额外的处理,可能会影响性能,而viewBinding只是在初始化时进行视图绑定,对性能影响较小。

注意:如果没有数据绑定需求,建议使用viewBinding,性能开销比较小。

二、使用:

1、dataBinding使用

1、启用DataBinding

 // 启用DataBinding
 dataBinding {
    enabled true
 }

2、MainActivity3 中绑定

class MainActivity3 : AppCompatActivity() {
    var binding: ActivityMain3Binding? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //绑定
        binding = ActivityMain3Binding.inflate(layoutInflater)

        binding?.tvTitle?.text = "最新赋值的UUUU"

        setContentView(binding?.root)
    }
}

public class MainActivity extends AppCompatActivity {
 ActivityMainBinding binding  = null
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
           
        // 创建绑定类
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
           
        // 设置 TextView 的文本
        binding.myTextView.setText("Hello, DataBinding!");
    }
    override fun onDestroy() {
        super.onDestroy();
        binding  = null;
    }
}

3、activity_main3.xml文件

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    tools:ignore="MissingDefaultResource">

    <data>
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="你好啊"
            />

    </LinearLayout>
</layout>

2、viewBinding 在activity中使用

1、启用ViewBinding

   // 启用ViewBinding
        viewBinding {
            enabled true
        }

2、MainActivity3中使用

class MainActivity3: AppCompatActivity() {

    var binding:ActivityMain3Binding? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMain3Binding.inflate(layoutInflater)
        setContentView(binding?.root)
        binding?.tvValue?.text = "我是涛哥啊"
    }
}

3、activity_main3.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    <TextView
        android:id="@+id/tv_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="默认值"
        />
</LinearLayout>

3、viewBinding 在fragment中使用
class BlankFragment2 : Fragment() {
    
    var fb: FragmentBlank2Binding ? = null;

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        // return inflater.inflate(R.layout.fragment_blank2, container, false)
        fb = FragmentBlank2Binding.inflate(layoutInflater)
        fb!!.ff2.text = "PL"
        return fb!!.root
    }
}

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".BlankFragment2">
    <TextView
        android:id="@+id/ff2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Hello blank fragment" />

</FrameLayout>

4、其它使用
//Kotlin 主要在Activity或Fragment中使用:
ActivityMainBinding binding = DataBindingUtil.setContentView(context, R.layout.activity_main);
//获取整体布局view
val view = binding.root

//java 主要在adapter或者自定view中使用绑定
ItemFlowLayoutBinding binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.item_flow_layout, null, false);
//获取整体布局view
View view = binding.getRoot()

最后

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
img
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

欢迎大家一键三连支持,若需要文中资料,直接扫描文末CSDN官方认证微信卡片免费领取↓↓↓(文末还有ChatGPT机器人小福利哦,大家千万不要错过)

PS:群里还设有ChatGPT机器人,可以解答大家在工作上或者是技术上的问题
图片

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ViewBindingDataBinding都是Android开发中的数据绑定框架,它们可以将布局文件中的视图与代码中的变量绑定起来,从而方便地操作视图和数据。 ViewBindingAndroid官方在Android Studio 3.6中推出的一个新特性,它通过生成一个与布局文件对应的绑定类来实现视图绑定,可以避免findViewById的繁琐操作,提高代码的可读性和可维护性。 DataBinding是Google在Android Studio 1.3中推出的一个数据绑定框架,它可以将数据与视图绑定起来,实现双向绑定,从而简化了代码的编写和维护。使用DataBinding可以将视图的属性和数据模型的属性绑定起来,当数据模型的属性发生变化时,视图会自动更新,反之亦然。 总的来说,ViewBinding适用于简单的视图绑定场景,而DataBinding则适用于更复杂的数据绑定场景。 ### 回答2: ViewBindingDataBinding都是Android中的数据绑定库。它们旨在使应用程序中的 UI 和逻辑分离,同时还可以减少模板化代码。虽然它们都执行类似的任务,但它们之间存在一些区别。 首先,ViewBinding是针对单个视图文件生成绑定类。这样,在绑定代码中,您只能访问单个视图。因此,ViewBinding的代码量要比DataBinding少。 相比而言,DataBinding要复杂一些。 DataBinding不仅可用于绑定单个视图,还可用于绑定整个布局层次结构。它需要实现一整套工具来使数据绑定的代码与布局文件相对应。 其次,ViewBinding是使用annotation处理器生成绑定类的方式实现数据绑定,这意味着它可以相对快速地编译布局文件。另一方面,DataBinding需要生成额外的 Java 代码和一些 XML 文件来实现数据绑定,这使编译时间更长。 但是,DataBinding可以使用双向绑定技术,这意味着数据的变化可以直接反映到视图中。这使得在处理表单输入等特定场景时使用DataBinding会更容易一些。 总体而言,ViewBinding是更简单的选择,适合较小的项目,而DataBinding则更为复杂,适合需要大规模数据绑定的项目。它们都是可用的解决方案,您可以根据需求进行选择。 ### 回答3: ViewBindingDataBindingAndroid中的两种视图绑定库。两者的共同点是都可以通过自动生成的绑定类来实现视图的绑定,从而避免了findViewById的繁琐操作;不同点在于ViewBinding的目的是简化视图绑定,而DataBinding则可以实现更复杂的数据绑定和数据处理。 ViewBinding的主要作用是消除繁琐的findViewById操作,并且能够更好地保证类型安全。使用ViewBinding,我们只需要在需要进行视图绑定的Activity或Fragment中引入绑定类,然后通过绑定类实例来访问布局文件中所包含的所有控件。ViewBinding使用起来非常简单,只需要在build.gradle中添加如下配置即可: android { ... viewBinding { enabled = true } } 使用ViewBinding的代码示例: private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) binding.textView.text = "Hello ViewBinding" } 对于DataBinding而言,它能够更好地实现数据绑定和数据处理,可以使用表达式将数据绑定到视图上,进行数据转换和格式化,从而实现更灵活的UI界面。使用DataBinding需要在build.gradle中添加如下配置: android { ... dataBinding { enabled = true } } 使用DataBinding的代码示例: <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <variable name="user" type="com.example.User" /> </data> <LinearLayout ... > <TextView ... android:text="@{user.name}" /> <TextView ... android:text="@{user.age,StringFormat}" /> <Button ... android:onClick="@{() -> user.onButtonClick()}" android:text="@{user.buttonText}" /> </LinearLayout> </layout> DataBinding可以更好地实现MVC中的数据与视图分离,也可以通过ViewModel和LiveData等技术实现MVVM模式。在使用DataBinding开发过程中,需要注意避免过于复杂的绑定表达式和数据转换等操作,以及注意内存泄漏的问题。 总的来说,ViewBindingDataBinding都是非常有用的Android开发库,可以根据具体的需求来选择使用哪种库,在提高开发效率的同时也能提升应用程序的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值