JetPack - 架构

207 阅读2分钟

复习

应用组件(布局 图片 屏幕 地区 状态适配)

  • 资源类型
  • 应用清单文件

Intent(显式、隐式)

  • 显式:组件名称

  • 隐式:操作、类型、数据

      action:send、main
      categray:defaultview
      data:mimetype、scheme
    

四大组件(Service中的新scalable)

视图绑定(bindingView,免findViewById)

 android {
 ...
    viewBinding {
        enabled = true
    }
}

数据绑定库(dataBinding,免代码视图数据更新)

布局根用layout,包含data跟view2个子节点

    <data class="自定义绑定类名字"> 
        <varialbe name="viewModel" type="com.jf.viewmodel"></varialbe> 
    </data>
    <data>
        <improt type="com.jf.viewmodel" alias(别名)="Vista"></varialbe> 
    </data>

eg:摘自官方文档

    <layout xmlns:android="http://schemas.android.com/apk/res/android">
       <data>
           <variable name="user" type="com.example.User"/>
       </data>
       <LinearLayout
           android:orientation="vertical"
           android:layout_width="match_parent"
           android:layout_height="match_parent">
           <TextView android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="@{user.firstName}"/>
           <TextView android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="@{user.lastName}"/>
       </LinearLayout>
    </layout>

1. 布局和绑定表达式

  • 绑定方式:

      DataBindingUtil.inflate()
      DataBindingUtil.setContentView()
      XXXXXXBinding.inflate()
      
      即时绑定 executePendingBindings() //强制刷新
    
      //伪代码,对于未知的布局,临时设置布局中名为 item 的变量,用于RecyclerView item 动态数据绑定
      动态绑定 DataBinding.setVariable(BR.item, item)
    
  • 数据引用

      属性引用
      视图引用 (其他View的属性引到本View)
      运算表达式
      集合、数组
      资源
    
  • 事件绑定

      方法引用    @{handle::onClick(View v)}
      监听绑定    @{() -> {present.onClick(Obj o)}}
    

2. 使用可观察的数据对象

    注意可观察字段为val, 利用set改变
  • 可观察的字段

      ObservableField<String>
      ObservableInt...
    
  • 可观察的集合

      ObservableArrayMap、ObservableArrayList
    
  • 可观察的对象

      Observalbe -> BaseObseravable
      get添加Bindable注解、set添加notifyPropertyChanged 方法
    

3. 绑定适配器

简单来讲就是布局中属性(特性)设定反射出实际代码逻辑

eg: text = "文本" ——> setText("文本")

静态方法 kotlin 种的object 复习

    根据数据引用的返回值 寻找对应的属性相关方法
    事件处理脚本(多个方法的接口会被拆分)
    对象根据属性类型自动转换

4. 视图与架构组件绑定

视图持有ViewModel,ViewModel 跟 视图联动

5. 双向数据绑定

视图对组件的变化做出相应,组件对视图变化做出响应

eg:单向绑定

    <CheckBox
        android:id="@+id/rememberMeCheckBox"
        android:checked="@{viewmodel.rememberMe}"
        android:onCheckedChanged="@{viewmodel.rememberMeChanged}"
    />

eg:双向绑定

简单的双向绑定就是 @={viewModel.name}

    <CheckBox
        android:id="@+id/rememberMeCheckBox"
        android:checked="@={viewmodel.rememberMe}"
    />

自定义的属性使用 @InverseBindingAdapter 和 @InverseBindingMethod 注释 进行双向绑定

生命周期(Lifecycle)

1、LisecycleObserver //观察者

2、LisecycleOwnner //被观察者Activity

可观察的数据对象 LiveData

LiveData.observe()

LiveData 与Room 的使用

LiveData 与 协程 的使用

LiveData 对 生命周期的感知

转换LiveData

    Transformations.map = LiveData -> Any
    Transformations.switchMap = LiveData<A> -> LiveData<B>

MediatorLiveData 多个源