[學(xué)習(xí)筆記]Android Jetpack簡(jiǎn)介

Jetpack 是一個(gè)由多個(gè)庫(kù)組成的套件滥酥,可幫助開發(fā)者遵循最佳做法,減少樣板代碼并編寫可在各種 Android 版本和設(shè)備中一致運(yùn)行的代碼畦幢,讓開發(fā)者精力集中編寫重要的代碼坎吻。

大體上,JetPack是Google推出的一些庫(kù)的集合宇葱。是Android基礎(chǔ)支持庫(kù)SDK以外的部分瘦真。

https://developer.android.google.cn/jetpack

為何使用 Android Jetpack?

遵循最佳做法

Android Jetpack 組件采用最新的設(shè)計(jì)方法構(gòu)建黍瞧,具有向后兼容性诸尽,可以減少崩潰和內(nèi)存泄露

消除樣板代碼

Android Jetpack 可以管理各種繁瑣的 Activity(如后臺(tái)任務(wù)、導(dǎo)航和生命周期管理)雷逆,以便您可以專注于打造出色的應(yīng)用弦讽。

減少不一致

這些庫(kù)可在各種 Android 版本和設(shè)備中以一致的方式運(yùn)作污尉,助您降低復(fù)雜性膀哲。

常見的架構(gòu)原則

如果您不應(yīng)使用應(yīng)用組件存儲(chǔ)應(yīng)用數(shù)據(jù)和狀態(tài),那么您應(yīng)該如何設(shè)計(jì)應(yīng)用呢被碗?

分離關(guān)注點(diǎn)

要遵循的最重要的原則是分離關(guān)注點(diǎn)某宪。一種常見的錯(cuò)誤是在一個(gè)?Activity?或?Fragment?中編寫所有代碼。這些基于界面的類應(yīng)僅包含處理界面和操作系統(tǒng)交互的邏輯锐朴。您應(yīng)使這些類盡可能保持精簡(jiǎn)兴喂,這樣可以避免許多與生命周期相關(guān)的問題。

請(qǐng)注意焚志,您并非擁有?Activity?和?Fragment?的實(shí)現(xiàn)衣迷;它們只是表示 Android 操作系統(tǒng)與應(yīng)用之間關(guān)系的粘合類。操作系統(tǒng)可能會(huì)根據(jù)用戶互動(dòng)或因內(nèi)存不足等系統(tǒng)條件隨時(shí)銷毀它們酱酬。為了提供令人滿意的用戶體驗(yàn)和更易于管理的應(yīng)用維護(hù)體驗(yàn)壶谒,您最好盡量減少對(duì)它們的依賴。

通過模型驅(qū)動(dòng)界面

另一個(gè)重要原則是您應(yīng)該通過模型驅(qū)動(dòng)界面(最好是持久性模型)膳沽。模型是負(fù)責(zé)處理應(yīng)用數(shù)據(jù)的組件汗菜。它們獨(dú)立于應(yīng)用中的?View?對(duì)象和應(yīng)用組件,因此不受應(yīng)用的生命周期以及相關(guān)的關(guān)注點(diǎn)的影響挑社。

持久性是理想之選陨界,原因如下:

如果 Android 操作系統(tǒng)銷毀應(yīng)用以釋放資源,用戶不會(huì)丟失數(shù)據(jù)痛阻。

當(dāng)網(wǎng)絡(luò)連接不穩(wěn)定或不可用時(shí)菌瘪,應(yīng)用會(huì)繼續(xù)工作。

應(yīng)用所基于的模型類應(yīng)明確定義數(shù)據(jù)管理職責(zé)阱当,這樣將使應(yīng)用更可測(cè)試且更一致俏扩。


Jetpack分類

Android Jetpack組件共分為四大類缀皱,F(xiàn)oundation、Architecture动猬、Behavior和UI啤斗。

Foundation(基礎(chǔ)組件):

基礎(chǔ)組件提供了橫向功能,例如向后兼容性赁咙、測(cè)試以及Kotlin語(yǔ)言的支持钮莲。它包含如下組件庫(kù):

Android KTX:Android KTX 是一組 Kotlin 擴(kuò)展程序,它優(yōu)化了供Kotlin使用的Jetpack和Android平臺(tái)的API彼水。以更簡(jiǎn)潔崔拥、更愉悅、更慣用的方式使用Kotlin進(jìn)行Android開發(fā)凤覆。

AppCompat:提供了一系列以AppCompat開頭的API链瓦,以便兼容低版本的Android開發(fā)。

Cars(Auto):有助于開發(fā) Android Auto 應(yīng)用的組件盯桦,無(wú)需擔(dān)心特定于車輛的硬件差異(如屏幕分辨率慈俯、軟件界面、旋鈕和觸摸式控件)拥峦。

Benchmark(檢測(cè)):從 Android Studio 中快速對(duì)基于 Kotlin 或 Java 的代碼進(jìn)行基準(zhǔn)化分析贴膘。衡量代碼性能,并將基準(zhǔn)化分析結(jié)果輸出到 Android Studio 控制臺(tái)略号。

Multidex(多Dex處理):為方法數(shù)超過 64K 的應(yīng)用啟用多 dex 文件刑峡。

Security(安全):按照安全最佳做法讀寫加密文件和共享偏好設(shè)置。

Test(測(cè)試):用于單元和運(yùn)行時(shí)界面測(cè)試的 Android 測(cè)試框架玄柠。

TV:構(gòu)建可讓用戶在大屏幕上體驗(yàn)沉浸式內(nèi)容的應(yīng)用突梦。

Wear OS:有助于開發(fā) Wear 應(yīng)用的組件。

Architecture(架構(gòu)組件):

架構(gòu)組件可幫助開發(fā)者設(shè)計(jì)穩(wěn)健羽利、可測(cè)試且易維護(hù)的應(yīng)用宫患。它包含如下組件庫(kù):

Data Binding(數(shù)據(jù)綁定):數(shù)據(jù)綁定庫(kù)是一種支持庫(kù),借助該庫(kù)铐伴,可以使用聲明式將布局中的界面組件綁定到應(yīng)用中的數(shù)據(jù)源撮奏。

Lifecycles:方便管理 Activity 和 Fragment 生命周期,幫助開發(fā)者書寫更輕量当宴、易于維護(hù)的代碼畜吊。

LiveData:是一個(gè)可觀察的數(shù)據(jù)持有者類。與常規(guī)observable不同户矢,LiveData是有生命周期感知的玲献。

Navigation:處理應(yīng)用內(nèi)導(dǎo)航所需的一切。

Paging:幫助開發(fā)者一次加載和顯示小塊數(shù)據(jù)。按需加載部分?jǐn)?shù)據(jù)可減少網(wǎng)絡(luò)帶寬和系統(tǒng)資源的使用捌年。

Room:Room持久性庫(kù)在SQLite上提供了一個(gè)抽象層瓢娜,幫助開發(fā)者更友好、流暢的訪問SQLite數(shù)據(jù)庫(kù)礼预。

ViewModel:以生命周期感知的方式存儲(chǔ)和管理與UI相關(guān)的數(shù)據(jù)眠砾。

WorkManager:即使應(yīng)用程序退出或設(shè)備重新啟動(dòng),也可以輕松地調(diào)度預(yù)期將要運(yùn)行的可延遲異步任務(wù)托酸。

谷歌推薦的應(yīng)用架構(gòu):

Behavior(行為):

行為組件可幫助開發(fā)者的應(yīng)用與標(biāo)準(zhǔn) Android 服務(wù)(如通知褒颈、權(quán)限、分享和 Google 助理)相集成励堡。它包含如下組件庫(kù):

CameraX:幫助開發(fā)者簡(jiǎn)化相機(jī)應(yīng)用的開發(fā)工作谷丸。它提供一致且易于使用的 API 界面,適用于大多數(shù) Android 設(shè)備应结,并可向后兼容至 Android 5.0(API 級(jí)別 21)刨疼。

DownloadManager(下載管理器):可處理長(zhǎng)時(shí)間運(yùn)行的HTTP下載,并在出現(xiàn)故障或在連接更改和系統(tǒng)重新啟動(dòng)后重試下載鹅龄。

Media & playback(媒體&播放):用于媒體播放和路由(包括 Google Cast)的向后兼容 API揩慕。

Notifications(通知):提供向后兼容的通知 API,支持 Wear 和 Auto砾层。

Permissions(權(quán)限):用于檢查和請(qǐng)求應(yīng)用權(quán)限的兼容性 API漩绵。

Preferences(偏好設(shè)置):提供了用戶能夠改變應(yīng)用的功能和行為能力贱案。

Sharing(共享):提供適合應(yīng)用操作欄的共享操作肛炮。

Slices(切片):創(chuàng)建可在應(yīng)用外部顯示應(yīng)用數(shù)據(jù)的靈活界面元素。

UI(界面組件):

界面組件可提供各類view和輔助程序宝踪,讓應(yīng)用不僅簡(jiǎn)單易用侨糟,還能帶來(lái)愉悅體驗(yàn)。它包含如下組件庫(kù):

Animation & Transitions(動(dòng)畫&過度):提供各類內(nèi)置動(dòng)畫瘩燥,也可以自定義動(dòng)畫效果秕重。

Emoji(表情符號(hào)):使用戶在未更新系統(tǒng)版本的情況下也可以使用表情符號(hào)。

Fragment:組件化界面的基本單位厉膀。

Layout(布局):xml書寫的界面布局或者使用Compose完成的界面溶耘。

Palette(調(diào)色板):從調(diào)色板中提取出有用的信息。

Jetpack版Wan-Android項(xiàng)目地址:Android Jetpack架構(gòu)開發(fā)組件化應(yīng)用實(shí)戰(zhàn)?歡迎star

Flutter版Wan-Android項(xiàng)目地址:Flutter版Wan-Android?歡迎star

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末服鹅,一起剝皮案震驚了整個(gè)濱河市凳兵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌企软,老刑警劉巖庐扫,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡形庭,警方通過查閱死者的電腦和手機(jī)铅辞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)萨醒,“玉大人斟珊,你說我怎么就攤上這事「恢剑” “怎么了倍宾?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)胜嗓。 經(jīng)常有香客問我高职,道長(zhǎng),這世上最難降的妖魔是什么辞州? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任怔锌,我火速辦了婚禮,結(jié)果婚禮上变过,老公的妹妹穿的比我還像新娘埃元。我一直安慰自己,他們只是感情好媚狰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布岛杀。 她就那樣靜靜地躺著,像睡著了一般崭孤。 火紅的嫁衣襯著肌膚如雪类嗤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天辨宠,我揣著相機(jī)與錄音遗锣,去河邊找鬼。 笑死嗤形,一個(gè)胖子當(dāng)著我的面吹牛精偿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赋兵,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼笔咽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了霹期?” 一聲冷哼從身側(cè)響起叶组,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎经伙,沒想到半個(gè)月后扶叉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勿锅,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年枣氧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了溢十。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡达吞,死狀恐怖张弛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酪劫,我是刑警寧澤吞鸭,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站覆糟,受9級(jí)特大地震影響刻剥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜滩字,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一造虏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧麦箍,春花似錦漓藕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至诀蓉,卻和暖如春栗竖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背交排。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工划滋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人埃篓。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像根资,于是被迫代替她去往敵國(guó)和親架专。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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