jetpack之DataBinding原理简析

核心

核心在于自动生成的代码里面,位置在app/build/generated/data_binding…/…;一直到自动生成的代码里面
jetpack之DataBinding原理简析_第1张图片

  1. UI调用DataBindingUtil.setContentView

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

     /**
     * 返回一个ViewDataBinding的子类,明显就是自动生成的那个xxxxBinding
     */
     public static  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类

流程原理

jetpack之DataBinding原理简析_第2张图片

性能

jetpack之DataBinding原理简析_第3张图片
jetpack之DataBinding原理简析_第4张图片

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

你可能感兴趣的:(Android之Jetpack)