jetpack之DataBinding原理简析

核心

核心在于自动生成的代码里面,位置在app/build/generated/data_binding…/…;一直到自动生成的代码里面
在这里插入图片描述

  1. UI调用DataBindingUtil.setContentView

     ...
     lateinit var binding: ActivityMainBinding
     ...
     binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
     ...
    
  2. DataBindingUtil内部操作

     /**
     * 返回一个ViewDataBinding的子类,明显就是自动生成的那个xxxxBinding
     */
     public static <T extends ViewDataBinding> T setContentView(@NonNull Activity activity,int layoutId, @Nullable DataBindingComponent bindingComponent) {
     	....
     	....
     	// 调用了自己的bindToAddedViews方法
     	return bindToAddedViews(bindingComponent, contentView, 0, layoutId);
     }
    

    bindToAddedViews方法又调用了自己的bind方法,而bind方法返回的是一个ViewDataBinding对象实例。
    此时,自动生成的xxxBinding类是ViewDataBinding的子类,最终还是调用了xxxBinding的bind方法,返回的也是自己的对象实例

  3. xxxBinding自动生成类的操作
    这个自动生成类的构造方法中,就指定了控件对象,还提供了绑定数据的set/get方法

     ...
     protected ActivityMainBinding(Object _bindingComponent, View _root, int _localFieldCount,
     LinearLayout llFm1, TextView tvIn, TextView tvOut) {
     	super(_bindingComponent, _root, _localFieldCount);
     	this.llFm1 = llFm1;
     	this.tvIn = tvIn;
     	this.tvOut = tvOut;
     }
    
     public abstract void setUser(@Nullable User user);
     
     @Nullable
     public User getUser() {
     	return mUser;
     }
     ...
    

    在我们调用了setXXX的方式来设置绑定数据的时候,会对页面进行刷新,找到绑定的数据的值对控件进行填充

    整个流程的参与者:使用Binding的UI,DataBindUtil,自动生成的Binding类,以及要绑定的数据Model类

流程原理

在这里插入图片描述

性能

在这里插入图片描述
在这里插入图片描述

总结,性能和稳定性都很好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值