技術(shù)不止重窟,文章有料载萌,加
JiuXinDev
入群,Android 搬磚路上不孤單
前言
在之前一個(gè)月的里巡扇,我系統(tǒng)的學(xué)習(xí)了Android Jetpack
組件扭仁,并輸出了即學(xué)即用Android Jetpack
系列文章??:
第一篇:《即學(xué)即用Android Jetpack - Navigation》
第二篇:《即學(xué)即用Android Jetpack - Data Binding》
第三篇:《即學(xué)即用Android Jetpack - ViewModel & LiveData》
第四篇:《即學(xué)即用Android Jetpack - Room》
第五篇:《即學(xué)即用Android Jetpack - Paging》
第六篇:《即學(xué)即用Android Jetpack - WorkManger》
第七篇:《即學(xué)即用Android Jetpack - Startup》
第八篇:《即學(xué)即用Android Jetpack - Paging 3》
該系列文章的意義在于指導(dǎo)初學(xué)者從零到一搭建一個(gè)MVVM + Anroid Jetpack組件
的App,最終完成一個(gè)如下的案例:
圖片 | 圖片 |
---|---|
項(xiàng)目地址:https://github.com/mCyp/Hoo
確認(rèn)過(guò)眼神霎迫,是迷戀鞋的人~斋枢。需要且必要說(shuō)明的是,該項(xiàng)目的一部分參考自谷歌的官方示例:android-sunflower
本項(xiàng)目采用的語(yǔ)言是Kotlin
知给,為什么是Kotlin
?顯然描姚,谷歌已經(jīng)宣布Kotlin
成為開(kāi)發(fā)安卓的首選語(yǔ)言涩赢,且今后的新出的東西會(huì)優(yōu)先支持Kotlin
。
為什么是Android Jetpack?
1. 從零到一搭建
Android Jetpack
是谷歌推出的加快Android應(yīng)用開(kāi)發(fā)的組件轩勘,而本應(yīng)用使用的一部分僅僅是左上角綠色的一部分:
CameraX
绊寻。不過(guò)花墩,仍然可以預(yù)見(jiàn)的是,谷歌在致力于安卓生態(tài)環(huán)境的搭建澄步。
我的Demo采用MVVM的設(shè)計(jì)模式冰蘑,這一點(diǎn)可以從我的架構(gòu)圖可以看出:
示例Demo少了網(wǎng)絡(luò)請(qǐng)求的部分,不過(guò)我覺(jué)得對(duì)于指導(dǎo)整體搭建的影響不是很大村缸。
2. Android Jetpack為我們做了什么祠肥?
其實(shí)我覺(jué)得這個(gè)問(wèn)題可以簡(jiǎn)化為Android Jetpack組件的作用是什么?
-
Navigation:一個(gè)用于管理
Fragment
切換的工具類(lèi)梯皿,可視化仇箱、可綁定控件县恕、支持動(dòng)畫(huà)等是其優(yōu)點(diǎn)。 -
Data Binding:不用說(shuō)剂桥,都知道忠烛,加速
MVVM
的創(chuàng)建。 -
Lifecycle:雖然我沒(méi)有寫(xiě)文章介紹权逗,但是不代表它的作用不夠強(qiáng)大况木,他是我們能夠處理
Activity
和Fragment
的生命周期的重要原因,在AndroidX
的Fragment
和Activity
已經(jīng)對(duì)Lifecycle
提供了默認(rèn)支持旬迹。 -
ViewModel:當(dāng)做
MVVM
的ViewModel層
火惊,并具有聲明周期意識(shí)的處理和UI相關(guān)的數(shù)據(jù)。 -
LiveData:同
RxJava
的作用一樣奔垦,對(duì)數(shù)據(jù)進(jìn)行監(jiān)聽(tīng)屹耐,優(yōu)點(diǎn)就是無(wú)需處理生命周期、無(wú)內(nèi)存泄漏等椿猎。 - Room:強(qiáng)大的ORM數(shù)據(jù)庫(kù)框架惶岭。
-
Paging:易于使用的數(shù)據(jù)分頁(yè)庫(kù),支持
RecyclerView
犯眠。 - WorkManager:靈活按灶、簡(jiǎn)單、延遲和保證執(zhí)行的后臺(tái)任務(wù)處理庫(kù)筐咧。
3. 你可能選擇Android Jetpack的原因
以下可能是你會(huì)選擇Android Jetpack的原因:
- 一起使用更方便:因?yàn)?code>Android Jetpack組件中的很多庫(kù)都對(duì)其他庫(kù)提供了支持鸯旁,比如
Room
和Paging
就對(duì)LiveData
提供了支持。 - 向后兼容:基本上每個(gè)組件都對(duì)低版本提供了支持量蕊。
- 支持
RxJava
:由于RxJava
強(qiáng)大的生態(tài)環(huán)境铺罢,幾乎和數(shù)據(jù)相關(guān)的組件都對(duì)RxJava
提供了支持。 - 減少代碼量:以
Data Binding + ViewModel + LiveData
或RxJava
構(gòu)建的MVVM
模式能夠顯著減少代碼量残炮,比較平時(shí)使用的MVP
模式也會(huì)更加方便韭赘,無(wú)需主動(dòng)更新UI。 - 無(wú)需捆綁:
Android Jetpack
系列組件可以無(wú)需捆綁使用势就,你如果只想用里面的單個(gè)庫(kù)泉瞻,那么就可以?xún)H僅依賴(lài)一個(gè)庫(kù)。
Android Jetpack的一些缺點(diǎn)
即使Android Jetpack
來(lái)自于谷歌官方苞冯,但是你也可能有太多的理由拒絕它袖牙!比如:
-
RxJava
那么強(qiáng)大,我會(huì)什么要選擇LiveData
? -
Navigation
的底層對(duì)Fragment
的管理直接采取了替換的方式抱完,雖然它可以配合BottomNavigationView
使用贼陶,但每次都重新加載顯然是不合理的。 -
Room
和其他數(shù)據(jù)庫(kù)框架相比,顯然沒(méi)有什么的優(yōu)勢(shì)碉怔,并且烘贴,我為什么還要多學(xué)一種數(shù)據(jù)庫(kù)框架呢?并且撮胧,Room
的遷移也比較繁瑣桨踪。 - ...
其實(shí),比較難以讓人難以接受的也就LiveData
和Navigation
的替換方式的采取芹啥,其他而言锻离,Android Jetpack
系列組件仍然值得一試。
Android Jetpack要學(xué)嗎墓怀?
學(xué)汽纠,肯定要學(xué),Android Jetpack
于谷歌而言傀履,這是他們重新整理和統(tǒng)一安卓生態(tài)環(huán)境決心的體現(xiàn)虱朵,Android Jetpack
所展現(xiàn)的內(nèi)容,也是谷歌想拓展和維護(hù)的方向钓账。于長(zhǎng)期苦惱于第三方庫(kù)選擇的廣大Android開(kāi)發(fā)者而言碴犬,這是谷歌為我們提供的一盞明燈。
也許梆暮,Android Jetpack
系列的部分庫(kù)還沒(méi)成熟到成為你工作的第一選擇服协,但是,深入學(xué)習(xí)Android Jetpack
組件會(huì)為你提供與谷歌大佬深入交流的機(jī)會(huì)啦粹,為你日常的開(kāi)發(fā)帶來(lái)一些想法偿荷,不過(guò),遺憾的是卖陵,即學(xué)即用Android Jetpack系列博客的目的僅僅是為初學(xué)者提供入門(mén)指導(dǎo)遭顶,對(duì)于進(jìn)階研究,可以閱讀卻把青梅嗅的《Android Jetpack專(zhuān)欄》泪蔫。
寫(xiě)在最后的話(huà)
除去可以學(xué)到Kotlin + MVVM + Android Jetpack
的知識(shí),相信你還可以在我的項(xiàng)目中學(xué)到:
-
ConstraintLayout
的使用喘批,幾乎每個(gè)界面布局都采用的ConstraintLayout
撩荣。 - 符合《阿里Android開(kāi)發(fā)手冊(cè)》的標(biāo)準(zhǔn)化資源命名方式。
如果即學(xué)即用系列博客和開(kāi)源項(xiàng)目Hoo能夠給你帶來(lái)幫助饶深,那也是我所希望看到餐曹,感謝閱讀~