ViewModel設(shè)計(jì)原理

Android Component Framework為我們解決了一些繁瑣的問題倚聚,并勾勒出Android App開發(fā)的合理框架瞧省。也可以說是一種官方推薦的標(biāo)準(zhǔn)范式盔性,使用這種范式編碼械媒,我們可以構(gòu)建出可展性更強(qiáng)蛀骇,邏輯更為清晰的App。因而在使用該種范式之前荧呐,我們有必要弄清楚該框架的設(shè)計(jì)思路汉形。同時(shí)我們也應(yīng)該高度重視框架給出的開發(fā)理念。的確倍阐,是一些基本的概疆,核心的理念指導(dǎo)或者誤導(dǎo)著我們的編碼

1.ViewModel的設(shè)計(jì)意圖是什么?

在官方給出的指導(dǎo)中峰搪,Actvity是作為一個(gè)自我封閉的系統(tǒng)組件而存在的岔冀,組件通信通過Intent,組件之間應(yīng)該解耦合概耻,最重要的是組件之間的跳轉(zhuǎn)都是通過系統(tǒng)服務(wù)處理的使套。嚴(yán)格意義上說,組件之間是并不直接溝通的鞠柄。這就會(huì)使得侦高,組件之間的數(shù)據(jù)也應(yīng)該是自我封閉的。舉一個(gè)很簡單的用例厌杜,ListActivity呈現(xiàn)一個(gè)日程列表奉呛,點(diǎn)擊條目跳轉(zhuǎn)到DetailActivity,在此可以編輯保存夯尽。就一般的做法瞧壮,我們會(huì)把所選的條目信息放入Intent,傳入DetailActivity,這也是標(biāo)準(zhǔn)做法匙握。通過這種方式傳遞數(shù)據(jù)咆槽,就表明數(shù)據(jù)在兩個(gè)Activity之間是獨(dú)立的。即使在DetailActivity重新編輯了條目肺孤,數(shù)據(jù)的改變也不會(huì)如實(shí)反映到ListActivity上去。原因何在济欢?就是數(shù)據(jù)獨(dú)立導(dǎo)致的赠堵。

Android官方文檔在講解Activity時(shí),著重強(qiáng)調(diào)了生命周期法褥,以及對(duì)每個(gè)狀態(tài)執(zhí)行何種操作給出了指導(dǎo)茫叭。但是并沒有避免程序員將大部分代碼邏輯放在Activity中。在最新的Android Component Frame的指導(dǎo)文檔中半等,Android Team強(qiáng)調(diào)了非常重要的觀點(diǎn)--Activity只是系統(tǒng)與App溝通的窗口揍愁,系統(tǒng)隨時(shí)可以銷毀掉Activity呐萨,因而將代碼邏輯放到Activity中是不可取的。也可以說Activity并不擁有數(shù)據(jù)莽囤,它只是負(fù)責(zé)接受數(shù)據(jù)變化谬擦,并通知UI跟新。

說到這里也應(yīng)該引出這篇文章的主角ViewModel了朽缎。ViewModel處理業(yè)務(wù)邏輯惨远,并在屏幕旋轉(zhuǎn),Activity被銷毀重建的時(shí)候话肖,依然存在北秽。

2.ViewModel源碼解析

ViewModel組件的源碼相當(dāng)簡單,它的目的就是建立一個(gè)UI和數(shù)據(jù)的隔離帶最筒。ViewModel為Activity或Fragment提供數(shù)據(jù)訪問接口贺氓,同時(shí)將UI層的指令傳遞給數(shù)據(jù)層。簡單點(diǎn)說床蜘,ViewModel組件的源碼就是圍繞如何獲取一個(gè)ViewModel來寫的辙培。ViewModelProviders.of獲取ViwModelProvider,ViewModelProvider.get獲取ViewModel悄泥。其中ViewModel的構(gòu)造方式可以由ViewModelProviders.of的Factory參數(shù)自行定義虏冻。support包中的AppCompatActivity已經(jīng)整合了LifeCycle和ViewModel組件。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弹囚,一起剝皮案震驚了整個(gè)濱河市厨相,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸥鹉,老刑警劉巖蛮穿,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異毁渗,居然都是意外死亡践磅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門灸异,熙熙樓的掌柜王于貴愁眉苦臉地迎上來府适,“玉大人,你說我怎么就攤上這事肺樟¢艽海” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵么伯,是天一觀的道長疟暖。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么俐巴? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任骨望,我火速辦了婚禮,結(jié)果婚禮上欣舵,老公的妹妹穿的比我還像新娘擎鸠。我一直安慰自己,他們只是感情好邻遏,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布糠亩。 她就那樣靜靜地躺著,像睡著了一般准验。 火紅的嫁衣襯著肌膚如雪赎线。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天糊饱,我揣著相機(jī)與錄音垂寥,去河邊找鬼。 笑死另锋,一個(gè)胖子當(dāng)著我的面吹牛滞项,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播夭坪,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼文判,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了室梅?” 一聲冷哼從身側(cè)響起戏仓,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亡鼠,沒想到半個(gè)月后赏殃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡间涵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年仁热,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勾哩。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抗蠢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出思劳,到底是詐尸還是另有隱情迅矛,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布敢艰,位于F島的核電站诬乞,受9級(jí)特大地震影響册赛,放射性物質(zhì)發(fā)生泄漏钠导。R本人自食惡果不足惜震嫉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望牡属。 院中可真熱鬧票堵,春花似錦、人聲如沸逮栅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽措伐。三九已至特纤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侥加,已是汗流浹背捧存。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留担败,地道東北人昔穴。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像提前,于是被迫代替她去往敵國和親吗货。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容