總算對mvvm有點理解了,也知道怎么樣去部署這個架構(gòu)喧笔。
大概就是這樣的流程,當(dāng)然這樣的流程圖椰苟,網(wǎng)上可能很多很多何乎,甚至比這個還詳細(xì),這是我自己弄的拍嵌,其實越簡單的東西,越能表達我的一些想法循诉。因為我這里使用到了2個官方庫 一個是LiveDate横辆,一個是ViewModel。搭配使用,真的厲害...
至于厲害之處就是網(wǎng)上百度的優(yōu)點,基本都發(fā)揮的淋漓盡致贬堵,什么防止內(nèi)存泄漏,綁定生命周期脆侮,耦合度大幅度降低,等等...
我這里參考了郭霖大嬸的一個Demo,他的MVVM架構(gòu)勇劣,層次分明靖避,結(jié)構(gòu)清晰。
送上地址:https://github.com/guolindev/coolweatherjetpack
由于是Kotlin的比默,我也熟悉了一天的Kotlin幻捏,差不多才理解這個項目。大概是這樣的:
1命咐,View層拿到對應(yīng)的ViewModel篡九,同時寫個自定義的Factor,往里面?zhèn)餍枰念惔椎欤热鐢?shù)據(jù)庫類榛臼,本地緩存類翰铡,網(wǎng)絡(luò)請求類,這里都進行封裝讽坏,然后在Inject里面進行統(tǒng)一管理
2, ViewMode層有一些方法,把需要請求參數(shù)帶過去例证,以及LiveData也帶過去路呜,為了方便通知Activity進行更新,然后進行判斷织咧,首先去本地數(shù)據(jù)庫或者緩存拿數(shù)據(jù)胀葱,有的話直接ListData.post進行通知更新UI,沒有的話笙蒙,進行網(wǎng)絡(luò)請求抵屿,然后存入本地,方便下次沒有網(wǎng)絡(luò)捅位,或者網(wǎng)絡(luò)差轧葛,可以優(yōu)先讀取緩存。
3艇搀,個人最后稍微加了一點邏輯尿扯,因為我們許多地方都會去展示列表,所以這里還是得分情況焰雕,是否是用戶主動刷新衷笋?是的話直接跳過讀取本地,不是再去本地矩屁。
編程之路長漫漫辟宗,不忘初心,方得始終A唢酢泊脐!