幾十億的設(shè)備都在用 Android 系統(tǒng)堵第,從高端手機(jī)到飛機(jī)上的影音娛樂(lè)系統(tǒng)矾芙,應(yīng)有盡有脖岛,不一而足朵栖。而 Android OS 則為這幾十億的設(shè)備保駕護(hù)航,高效管理資源柴梆,保障運(yùn)行流暢陨溅,然而有時(shí)候卻增加了開(kāi)發(fā)卓越 App 的難度。為了簡(jiǎn)化開(kāi)發(fā)流程绍在,我們?cè)?Google I/O 大會(huì)上發(fā)布了架構(gòu)組件(Architecture Components)的預(yù)覽版门扇,為 App 開(kāi)發(fā)構(gòu)架提供指南雹有,并為常見(jiàn)任務(wù),如生命周期管理臼寄、數(shù)據(jù)持久性等提供了一系列庫(kù)霸奕。有了這些基礎(chǔ)組件的幫助,開(kāi)發(fā)者能夠使用更少的樣板代碼寫(xiě)出模塊化 App吉拳,將精力用于創(chuàng)新而非重復(fù)體力勞動(dòng) —— 我們也會(huì)在今后繼續(xù)完善這一基礎(chǔ)架構(gòu)质帅。
今天我們很高興地宣布 Room 和生命周期管理(Lifecycles)的架構(gòu)組建庫(kù) 1.0 穩(wěn)定版正式發(fā)布,其 API 已經(jīng)可以在生產(chǎn)環(huán)境的 App 和庫(kù)中使用留攒,并且我們強(qiáng)烈建議在 App 架構(gòu)和本地儲(chǔ)存方面需要幫助的開(kāi)發(fā)者使用這些 API (只是推薦使用煤惩,并不硬性要求)。此外生命周期管理同時(shí)也已集成到支持庫(kù)中(Support Library)炼邀,因此開(kāi)發(fā)者也可以在標(biāo)準(zhǔn)類別里盟庞,如 AppCompatActivity 中使用這些 API。
雖然我們今日才發(fā)布穩(wěn)定版汤善,其測(cè)試版組件早已被整合進(jìn)達(dá)十億量級(jí)下載的 App 中什猖。架構(gòu)組件幫助很多頂級(jí)開(kāi)發(fā)團(tuán)隊(duì),如 Zapppos红淡,將更多的時(shí)間集中在更為關(guān)鍵的工作中不狮。
在架構(gòu)組件發(fā)布之前,我們有自己的 ViewModel 實(shí)現(xiàn)在旱,通過(guò)加載器(Loader) 和依賴注入(Dependency Injection)保證即使配置更改后摇零,ViewModel 依舊不變。我們最近轉(zhuǎn)用了架構(gòu)組件中的 ViewModel 實(shí)現(xiàn)桶蝎,并完全擺脫了重復(fù)工作驻仅,我們發(fā)現(xiàn)可以將更多的時(shí)間用于設(shè)計(jì)、業(yè)務(wù)邏輯和測(cè)試登渣,而不是浪費(fèi)在樣板代碼或擔(dān)心 Android 生命周期的問(wèn)題上噪服。
同時(shí)我們也開(kāi)始借助 LiveData —— 一個(gè)可以感知 Activity 生命周期的數(shù)據(jù)容器 —— 用于獲取和顯示網(wǎng)絡(luò)數(shù)據(jù),而不用再擔(dān)心網(wǎng)絡(luò)調(diào)用的訂閱管理胜茧。 —— David Henry粘优,Zappos 的 Android 軟件工程師
架構(gòu)組件提供簡(jiǎn)單、靈活而且操作性高的方法呻顽,解決開(kāi)發(fā)者遇到的常見(jiàn)問(wèn)題雹顺,讓他們可以專注于打造一流的用戶體驗(yàn)。在其背后廊遍,我們通過(guò) App 架構(gòu)指南嬉愧,將多個(gè)核心構(gòu)建單元捆綁在一起。
Lifecycles
每個(gè) Android 開(kāi)發(fā)者都應(yīng)該面對(duì)過(guò)生命周期問(wèn)題喉前,即操作系統(tǒng)啟動(dòng)没酣、停止和銷毀 Activity王财。這意味著開(kāi)發(fā)者需要根據(jù)生命周期的不同階段,有針對(duì)性地管理組件狀態(tài)四康,比如用于更新用戶界面的可觀察對(duì)象搪搏。生命周期管理(Lifecycles)幫助開(kāi)發(fā)者創(chuàng)建 “可感知生命周期的”組件,讓其自己管理自己的生命周期闪金,從而減少內(nèi)存泄露和崩潰的可能性疯溺。生命周期庫(kù)是其他架構(gòu)組件(如 LiveData)的基礎(chǔ)。
了解更多Lifecycles相關(guān)內(nèi)容:
https://developer.android.google.cn/topic/libraries/architecture/lifecycle.html
LiveData
LiveData 是一款基于觀察者模式的可感知生命周期的核心組件哎垦。LiveData 為界面代碼 (Observer)的監(jiān)視對(duì)象 (Observable)囱嫩,當(dāng) LiveData 所持有的數(shù)據(jù)改變時(shí),它會(huì)通知相應(yīng)的界面代碼進(jìn)行更新漏设。同時(shí)墨闲,LiveData 持有界面代碼 Lifecycle 的引用,這意味著它會(huì)在界面代碼(LifecycleOwner)的生命周期處于 started 或 resumed 時(shí)作出相應(yīng)更新郑口,而在 LifecycleOwner 被銷毀時(shí)停止更新鸳碧。通過(guò) LiveData,開(kāi)發(fā)者可以方便地構(gòu)建安全性更高犬性、性能更好的高響應(yīng)度用戶界面瞻离。
了解更多 LiveData 相關(guān)內(nèi)容:
https://developer.android.google.cn/topic/libraries/architecture/livedata.html
ViewModel
ViewModel 將視圖的數(shù)據(jù)和邏輯從具有生命周期特性的實(shí)體(如 Activity 和 Fragment)中剝離開(kāi)來(lái)。直到關(guān)聯(lián)的 Activity 或 Fragment 完全銷毀時(shí)乒裆,ViewModel 才會(huì)隨之消失套利,也就是說(shuō),即使在旋轉(zhuǎn)屏幕導(dǎo)致 Fragment 被重新創(chuàng)建等事件中鹤耍,視圖數(shù)據(jù)依舊會(huì)被保留肉迫。ViewModels 不僅消除了常見(jiàn)的生命周期問(wèn)題,而且可以幫助構(gòu)建更為模塊化稿黄、更方便測(cè)試的用戶界面喊衫。
了解更多 ViewModel相關(guān)內(nèi)容:
https://developer.android.google.cn/topic/libraries/architecture/viewmodel.html
Room
幾乎所有 App 都需要在本地儲(chǔ)存數(shù)據(jù)。自從最早版本開(kāi)始抛猖,Android 就提供了 SQLite格侯,但是直接使用 SQLite是件苦差事。因此财著,我們推出了Room,一款簡(jiǎn)單好用的對(duì)象映射層撑碴。它和 SQLite 有一樣強(qiáng)大的功能撑教,但是節(jié)省了很多重復(fù)編碼的麻煩事兒。它的一些功能醉拓,如編譯時(shí)的數(shù)據(jù)查詢驗(yàn)證伟姐、內(nèi)置遷移支持等收苏,讓開(kāi)發(fā)者能夠更簡(jiǎn)單地構(gòu)建健壯的持久層。而且 Room 可以和 LiveData 集成在一起愤兵,提供可觀測(cè)數(shù)據(jù)庫(kù)并感知生命周期的對(duì)象鹿霸。Room 集簡(jiǎn)潔、強(qiáng)大和可靠性為一身秆乳,在管理本地儲(chǔ)存上表現(xiàn)卓越懦鼠,我們強(qiáng)烈推薦各位開(kāi)發(fā)者試用一下。
了解更多Room相關(guān)內(nèi)容:
https://developer.android.google.cn/topic/libraries/architecture/room.html
App 架構(gòu)指南以及更多訊息
最后還有一個(gè)要點(diǎn)得說(shuō)明一下:我們撰寫(xiě)了 “App 架構(gòu)指南”屹堰,涵蓋數(shù)條適用于所有開(kāi)發(fā)者的關(guān)鍵原則以及針對(duì)架構(gòu)組件的具體指導(dǎo)肛冶。因?yàn)橛虚_(kāi)發(fā)者向我們反映,清晰扯键、連貫的指南文檔很重要睦袖,因此我們現(xiàn)在更新了開(kāi)發(fā)者文檔,在適當(dāng)之處指明架構(gòu)組件荣刑。此外馅笙,我們還在官網(wǎng)發(fā)布了一系列相關(guān)視頻、codelab 和 App 樣本厉亏,并且會(huì)陸續(xù)補(bǔ)充董习。
App 架構(gòu)指南:
https://developer.android.google.cn/topic/libraries/architecture/guide.html
Android 架構(gòu)組件官網(wǎng):
https://developer.android.google.cn/topic/libraries/architecture/index.html
繼續(xù)注意此領(lǐng)域
盡管首套架構(gòu)組件已經(jīng)發(fā)布穩(wěn)定版,我們深知路漫漫其修遠(yuǎn)兮叶堆。在過(guò)去的幾個(gè)月中阱飘,我們正對(duì)各位提出的反饋,認(rèn)真作出改進(jìn)虱颗。在最近通過(guò) Alpha 測(cè)試版渠道沥匈,我們還發(fā)布了新組件 —— PagedList,解決大家用 RecyclerView 處理大數(shù)據(jù)集的困難忘渔。旅途才剛剛開(kāi)始高帖,我們還有更多重要組件還在開(kāi)發(fā)階段,有望在未來(lái)的幾個(gè)月和大家見(jiàn)面畦粮。
了解更多PagedList內(nèi)容:
https://developer.android.google.cn/topic/libraries/architecture/paging.html
提交反饋:
https://developer.android.google.cn/topic/libraries/architecture/feedback.html
我們希望架構(gòu)組件能夠解放開(kāi)發(fā)者散址,讓各位能夠?qū)W⒂趧?chuàng)新,打造移動(dòng)端獨(dú)一無(wú)二的新體驗(yàn)宣赔。我們很高興最終發(fā)布可用于生產(chǎn)環(huán)境的穩(wěn)定版本预麸。在此,我們特別要感謝開(kāi)發(fā)者一直以來(lái)提供的寶貴建議儒将,希望各位在下方討論區(qū)踴躍留言吏祸。
各位一直翹首以盼穩(wěn)定版的朋友們,何不今天就開(kāi)始下載使用钩蚊?