深入理解安卓MVVM架構(gòu)原理

深入理解安卓MVVM架構(gòu)原理
1. 簡(jiǎn)介
- LifeCycle
- 界面生命周期感知
- DataBinding
- 數(shù)據(jù)和UI雙向綁定
- ViewModel
- 業(yè)務(wù)邏輯
- LiveData
- 可觀察數(shù)據(jù)項(xiàng)
- MVVM項(xiàng)目框架搭建
- 通用性的快速開(kāi)發(fā)框架
- 可應(yīng)用各項(xiàng)目中
## 2. Lifecycle
2.1 功能使用
- Lifecycle類說(shuō)明、作用和意義
- 監(jiān)聽(tīng)Activity的生命周期變化,LifecycleEventObserver
- 使用@OnLifecycleEvent監(jiān)聽(tīng)特定生命周期(反射)
- 使用APT實(shí)現(xiàn)3(回調(diào))
- 最佳應(yīng)用方式
2.2 源碼分析
- Activity如何監(jiān)聽(tīng)生命周期變化的
- @OnLifecycleEvent注解是如何使用的? 反射調(diào)用的過(guò)程
- 使用APT時(shí),回調(diào)方法的過(guò)程
- 匿名內(nèi)部類作為L(zhǎng)ifecycleObserver時(shí),有什么特殊?
2. Databinding
2.1 功能使用
- 字段單向數(shù)據(jù)綁定
- 字段雙向數(shù)據(jù)綁定
- 界面事件綁定
- onclick
- onLongClick
- onItemClick
- onCheckedChanged
- onItemChangedChanged
- 綁定內(nèi)容表達(dá)式支持
- ==、>、<、>=、<=、?:、!= 、??、&&、||、!、&、|、~、instanceof、<<、>>、>>>、() + - * /
- 導(dǎo)入其他的類,類別名
- 嵌套綁定問(wèn)題
- include其他布局文件
- 綁定的數(shù)據(jù)共享
- 自定義BindingAdapter的方式
- Glide自定義BindingAdapter實(shí)現(xiàn)
- 在xml中直接給ImageView設(shè)置顯示圖片
- 圖片可以是網(wǎng)絡(luò)圖片http、本地文件地址、drawable資源、assets資源等
<ImageView android:layout_width="100dp" android:layout_height="100dp" app:binding_src="@{viewmodel.image}"/>
- RecyclerView通用Adapter綁定實(shí)現(xiàn)
- 不再需要寫Adapter、Holder類
<RecyclerView ??android:layout_width="match_parent" ??android:layout_height="match_parent" ??app:itemBinding="@{viewmodel.itemBinding}" />
2.2 源碼分析
- 說(shuō)說(shuō)雙向數(shù)據(jù)綁定的實(shí)現(xiàn)原理?
- 如何自定義BindingAdapter?
- 自定義的BindingAapter是如何調(diào)用的?
- databinding對(duì)原始的xml布局文件做了哪些修改?
- 編譯后的xml和原始xml有什么區(qū)別?區(qū)別的內(nèi)容有什么作用?
- Databinding使用APT生成了哪些代碼?
- Databinding和ViewBinding的區(qū)別?
3. ViewModel
3.1 ViewModel的使用
- 每個(gè)Acitivty或Fragment都配一個(gè)自己的ViewModel,Viewmodel中處理這個(gè)Activity的業(yè)務(wù)邏輯
- MainActivity ---> MainViewModel
- LoginActivity ---> LoginViewModel
- ViewModel對(duì)象的創(chuàng)建
- 直接new對(duì)象,不推薦,無(wú)法復(fù)用,無(wú)法自動(dòng)清理
- 用ViewModelProvider來(lái)創(chuàng)建
LoginViewModel vm = ViewModelProvider(this).get(LoginViewModel.class);
- 用kotlin擴(kuò)展函數(shù)來(lái)創(chuàng)建
implementation 'androidx.activity:activity-ktx:1.5.1' val vm = viewmodels<LoginViewModel>()
- ViewModel的生命周期
- 同Activity,onDestroy時(shí)執(zhí)行onClear清理ViewModel
3. 2 ViewModel源碼
- 有幾種創(chuàng)建ViewModel的方式?
- 如何在應(yīng)用中所有的ViewModel中都傳入某個(gè)全局對(duì)象,如Http請(qǐng)求類的單例。而不需要在創(chuàng)建ViewModel時(shí)顯示傳遞此參數(shù)
- 如何自定義創(chuàng)建ViewModel的Fragtory?安卓有哪些現(xiàn)成的Fragtory?有什么作用?
- ViewModel如何在多個(gè)Activity中共享?
- ViewModel如何實(shí)現(xiàn)在Activity銷毀時(shí)自動(dòng)清理的?
標(biāo)簽: