Android—MVC、MVP、MVVM
MVC:
- 視圖(View):用戶界面。
- 控制器(Controller):業(yè)務(wù)邏輯
- 模型(Model):數(shù)據(jù)保存
操作方式: 用戶操作View或Controller
缺點(diǎn):View與Model之間存在關(guān)系,Activity既是View也是Controller,代碼量大。
MVP:
Controller改為Presenter
MVVM:
Presenter改為ViewModel
采用雙向綁定(data-binding):View的變動(dòng),自動(dòng)反映在 ViewModel,反之亦然。用到了檢查者模式。
優(yōu)點(diǎn):
低耦合:View和Model不相互聯(lián)系
可重用性:你可以把一些視圖邏輯放在一個(gè)ViewModel里面,讓很多view重用這段視圖邏輯
Android的ViewModel的生命周期貫穿整個(gè)應(yīng)用。
ViewModel:
LiveData:
LiveData是一個(gè)在線程間傳遞數(shù)據(jù)的容器。當(dāng)后臺(tái)線程得到數(shù)據(jù)后,通過(guò)setValue()、postValue()方法投遞數(shù)據(jù)。其他線程通過(guò)getValue()得到數(shù)據(jù)。
setValue()只能在主線程中調(diào)用,postValue()可以在任何線程中調(diào)用。
LiveData具有保證UI和狀態(tài)一致、避免內(nèi)存泄漏、避免手動(dòng)管理生命周期等優(yōu)點(diǎn)。
在調(diào)用observe()時(shí),第一個(gè)參數(shù)是LifecycleOwner,第二個(gè)參數(shù)是Observer。LiveData建立一個(gè)LifecyleBoundObserver對(duì)象,將這兩個(gè)參數(shù)綁定到一起,來(lái)接收Lifecycle的生命周期更新和LiveData的數(shù)據(jù)更新。LifecycleBoundObserver是一個(gè)的內(nèi)部類,它持有了LiveData引用。當(dāng)生命周期發(fā)生變化(LifecycleRegistry.handleLifecyleEvent)時(shí),LifecycleBoundObserver調(diào)用LiveData的dispatchingValue()方法,獲取最新數(shù)據(jù)。
LiveData的特點(diǎn):
- 采用觀察者模式,數(shù)據(jù)發(fā)生改變,可以自動(dòng)回調(diào)(比如更新UI)。
- 不需要手動(dòng)處理生命周期,不會(huì)因?yàn)锳ctivity的銷毀重建而丟失數(shù)據(jù)。
- 不會(huì)出現(xiàn)內(nèi)存泄漏。
- 不需要手動(dòng)取消訂閱,Activity在非活躍狀態(tài)下(pause、stop、destroy之后)不會(huì)收到數(shù)據(jù)更新信息。
ViewModel+LiveData 實(shí)現(xiàn)Fragment之間通信
總結(jié)
以上是生活随笔為你收集整理的Android—MVC、MVP、MVVM的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android—屏幕适配和卡顿优化
- 下一篇: Android—ActivityThre