天天看點

2021年Android面經分享,吐血整理背景JetPack裡的元件三、Android Jetpack簡介四、Android Jetpack分類五、在應用中引入Jetpack相關元件總結

背景

本人雙非渣本 今年由于疫情,上半年一直在家裡。2月份本來無憂無慮,呆在家裡不給國家添亂的時候,發現身邊的同學找到了大廠的offer。心裡開始有點慌張。本來想在3月份如果能回到學校,就開始考研之路,但誰曾想這個假期,一直到了9月份。在家也嘗試過考研,自己還是耐不住學習的寂寞,放棄了。走上了找工作的路途。

3月份,開始投履歷,在牛客網上,找了幾個内推,投了位元組,阿裡和騰訊。(ps:那時候也不知道誰給的勇氣)。本來以為自己的履歷不可能過篩選的,但每個投的履歷都收到了面試通知。

2021年Android面經分享,吐血整理背景JetPack裡的元件三、Android Jetpack簡介四、Android Jetpack分類五、在應用中引入Jetpack相關元件總結
2021年Android面經分享,吐血整理背景JetPack裡的元件三、Android Jetpack簡介四、Android Jetpack分類五、在應用中引入Jetpack相關元件總結

無一例外,每一次的失敗都是以失敗告終,中間被撈起來,又被拒絕。可能自己的能力沒有達到他們公司的标準吧。到8月份,還是沒有收到一家公司的offer,在開學前總結了一下這段時間的面試,感覺自己總是在飄在空中,沒有站在地下。基礎還是沒有打牢。

9月份沒有再投履歷,靜下心,學習基礎理論知識,‘宅家苦修’30天,在10月份的時候,開始了新一輪的投遞。

美團、bilibili、拼多多、京東。等待了好久,沒有一個邀請我做筆試和面試的,那時候真的以為,抓不住秋招尾巴了。隻能自己安慰自己說:自己的能力還不夠,再加油,春招一定進大廠。

在漫長的等待後,美團給我發來了面試通知,開啟了我做夢般的面試流程,星期一 一面,星期四 二面,星期五三面,晚上就收到了offer通知。真的就像做夢一樣。

JetPack裡的元件

2021年Android面經分享,吐血整理背景JetPack裡的元件三、Android Jetpack簡介四、Android Jetpack分類五、在應用中引入Jetpack相關元件總結

上圖就是JetPack中包含的元件清單,每個元件都是相對獨立的,可以被單獨使用和建構。其中像被介紹的最多,也是最常被使用的LiveData, ViewModel, Room, Navigation, WorkManager之類的都釋出了正式版,而CameraX, Compose之類的還處在Alpha版本,未正式釋出,官方并不建議在生産環境中使用。

然後說下,JetPack所有的元件都是基于AndroidX建構的,如果想在項目中使用JetPack需要先将項目中對Support Lib的依賴全部換成AndroidX。

Android目前已經發展了11年,可以說是比較成熟的技術了,一開始時架構很少,也沒有什麼規範,所有的代碼都是要自己寫,比如網絡請求,資料庫請求,資料解析等等。後來出現了一些架構來幫助開發者快速進行開發,比如XUtils、Volley、OKHttp、EventBus等,随着架構越來越多,一個應用可以有多種技術選型,直接導緻應用開發越來越不規範,導緻做出來的應用品質參差不齊,這顯然不是谷歌想看到的。谷歌随後推出了MVP和MVVM相關的官方例子,效果很一般,而且覆寫面隻是在架構上,Goole I/O 2018大會上推出的Android Jetpack有望解決以上的問題。

三、Android Jetpack簡介

Jetpack并不是一個架構或者元件,它是一套庫、工具和指南的集合,可幫助開發者更輕松地編寫優質應用。這些元件可幫助開發者遵循最佳做法、擺脫編寫樣闆代碼的工作并簡化複雜任務,以便将精力集中放在所需的代碼上。

Android Jetpack中的很多元件并不都是新開發的,而是很早就有了,比如在Goole I/O 2017大會時推出了 Android Architecture Component(AAC),它包括了LifeCycle、LiveData、ViewModel、Room。在Goole I/O 2018大會上,

用AndroidX替代了Android Support Library,并在Android Architecture Component的基礎上釋出了Android Jetpack,AndroidX也是屬于Android Jetpack。

Jetpack主要特性有以下三點:

1.加速開發

元件可單獨使用,也可以協同工作,當使用kotlin語言特性時,可以提高效率。

2.消除樣闆代碼

Android Jetpack可管理繁瑣的Activity(如背景任務、導航和生命周期管理)。

3.建構高品質的強大應用

Android Jetpack元件圍繞現代化設計實踐建構而成,具有向後相容性,可以減少崩潰和記憶體洩漏。

四、Android Jetpack分類

下圖是Jetpack的分類。

2021年Android面經分享,吐血整理背景JetPack裡的元件三、Android Jetpack簡介四、Android Jetpack分類五、在應用中引入Jetpack相關元件總結

谷歌仍舊不斷的完善Android Jetpack,截至到2019年8月已經有很多新加的元件并沒有顯示在上圖中,比如CameraX等。Android Jetpack分類有4種,分别是Architecture、Foundationy、Behavior、UI,下面分别介紹下。

1. Architecture(架構元件)

Architecture指的是架構元件,幫助開發者設計穩健、可測試且易維護的應用。架構元件可以說是對應用開發幫助最大的元件,本系列也是圍繞着架構元件進行講解。

DataBinding:以聲明方式将可觀察資料綁定到界面元素,通常和ViewModel配合使用。

Lifecycle:用于管理Activity和Fragment的生命周期,可幫助開發者生成更易于維護的輕量級代碼。

LiveData: 在底層資料庫更改時通知視圖。它是一個可觀察的資料持有者,與正常observable不同,LiveData是生命周期感覺的。

Navigation:處理應用内導航。

Paging:可以幫助開發者一次加載和顯示小塊資料,按需加載部分資料可減少網絡帶寬和系統資源的使用。

Room:友好、流暢的通路SQLite資料庫。它在SQLite的基礎上提供了一個抽象層,允許更強大的資料庫通路。

ViewModel: 以生命周期的方式管理界面相關的資料,通常和DataBinding配合使用,為開發者實作MVVM架構提供了強有力的支援。

WorkManager: 管理Android的背景的作業,即使應用程式退出或裝置重新啟動也可以運作可延遲的異步任務。

官方推薦的Android應用架構如下圖所示。

2021年Android面經分享,吐血整理背景JetPack裡的元件三、Android Jetpack簡介四、Android Jetpack分類五、在應用中引入Jetpack相關元件總結

這些架構元件既可以配合使用,也可以單獨使用,這裡建議還是盡量按照官方推薦的來。

2. Foundationy(基礎元件)

基礎元件提供橫向功能,例如向後相容性、測試、安全、Kotlin 語言支援,并包括多個多個平台開發的元件。

Android KTX:優化了供Kotlin使用的Jetpack和Android平台API。幫助開發者以更簡潔、更愉悅、更慣用的方式使用Kotlin進行Android開發。

AppCompat:幫助較低版本的Android系統進行相容。

Auto: 開發Android Auto應用的元件,提供了适用于所有車輛的标準化界面和使用者互動。

檢測:從AndroidStudio中快速檢測基于Kotlin或Java的代碼。

多Dex處理:為具有多個Dex檔案應用提供支援。

安全:安全的讀寫加密檔案和共享偏好設定。

測試:用于單元和運作時界面測試的Android 測試架構。

TV: 建構可讓使用者在大螢幕上體驗沉浸式内容的應用。

Wear OS:開發Wear應用的元件。

3. Behavior(行為元件)

行為元件可幫助開發者的應用與标準Android服務(如通知、權限、分享)相內建。

CameraX:幫助開發簡化相機應用的開發工作。它提供一緻且易于使用的界面,适用于大多數Android。 裝置,并可向後相容至Android 5.0(API 21)。

DownloadManager:處理長時間運作的HTTP下載下傳的系統服務。

媒體和播放:用于媒體播放和路由(包括Google Cast)的向後相容API。

通知:提供向後相容的通知API,支援Wear和Auto。

權限:用于檢查和請求應用權限的相容性API。

設定:建立互動式設定,建議使用AndroidX Preference Library庫将使用者可配置設定內建到應用中。

分享操作:可以更輕松地實作友好的使用者分享操作。

切片:切片是一種UI模闆,建立可在應用外部顯示應用資料的靈活界面元素。

4. UI(界面元件)

Animation and Transition:該架構包含用于常見效果的内置動畫,并允許開發者建立自定義動畫和生命周期回調。

Emoji Compatibility:即便使用者沒有更新Android系統也可以擷取最新的表情符号。

Fragment:元件化界面的基本機關。

布局:用XML中聲明UI元素或者在代碼中執行個體化UI元素。

調色闆:從調色闆中提取出有用的資訊。

五、在應用中引入Jetpack相關元件

在項目build.gradle中添加google() 庫,如下所示。

allprojects {
        repositories {
            google()
            jcenter()
        }
    }

           

如果想引入Room,可以在子產品build.gradle中這麼寫:

implementation   "android.arch.persistence.room:runtime:1.1.1"
    annotationProcessor   "android.arch.persistence.room:compiler:1.1.1 "
    androidTestImplementation  "android.arch.persistence.room:testing:1.1.1"

           

總結

這篇文章内部不多,旨在讓大家了解Android Jetpack是什麼,包括什麼,如何引用,從下一篇開始,就開始學習Android Jetpack的架構元件。

最後對于程式員來說,要學習的知識内容、技術有太多太多,要想不被環境淘汰就隻有不斷提升自己,從來都是我們去适應環境,而不是環境來适應我們!

總結

作為一名從事Android的開發者,很多人最近都在和我吐槽Android是不是快要涼了?而在我看來這正是市場成熟的表現,所有的市場都是溫水煮青蛙,永遠會淘汰掉不願意學習改變,安于現狀的那批人,希望所有的人能在大浪淘沙中留下來,因為對于市場的逐漸成熟,平凡并不是我們唯一的答案!

在最後我整理了一份資料,而且我們為了感謝很多支援的學者,資料是無償分享的,需要的同學可以來學習學習

領取方式:點選騰訊文檔位址

2021年Android面經分享,吐血整理背景JetPack裡的元件三、Android Jetpack簡介四、Android Jetpack分類五、在應用中引入Jetpack相關元件總結
2021年Android面經分享,吐血整理背景JetPack裡的元件三、Android Jetpack簡介四、Android Jetpack分類五、在應用中引入Jetpack相關元件總結

領取方式:點選騰訊文檔位址**

[外鍊圖檔轉存中…(img-b5x3YvM2-1621854183985)]

[外鍊圖檔轉存中…(img-ALbhDgvk-1621854183986)]