Android Jetpack組件一覽

android禿老師 發佈 2022-10-27T23:17:58.069803+00:00

Jetpack 是一個由多個庫組成的套件,可幫助開發者遵循最佳做法,減少樣板代碼並編寫可在各種 Android 版本和設備中一致運行的代碼,讓開發者精力集中編寫重要的代碼。

官網簡介

Jetpack 是一個由多個庫組成的套件,可幫助開發者遵循最佳做法,減少樣板代碼並編寫可在各種 Android 版本和設備中一致運行的代碼,讓開發者精力集中編寫重要的代碼。

Jetpack 是 Google 為解決 Android 開發碎片化,打造成熟健康生態圈提出的戰略規劃,是 Google 對 Android 未來提出的發展方向,同時它也是眾多優秀 Android 組件的集合。

JetPack的構成圖

Jetpack主要特性:

1.加速開發

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

2.消除樣板代碼

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

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

Android Jetpack組件圍繞現代化設計實踐構建而成,具有向後兼容性,可以減少崩潰和內存泄漏。

Jetpack常見組件介紹

一、Lifecycle

lifecycle通過觀察者模式監聽生命周期

被觀察者(lifecycleOwner):activity,Fragment聲明周期變化getLifecycle().addObversever(自己的類)綁定觀察者—>通知 dispatch(Event)—>觀察者(lifecycleObserver):用戶類,FrameWork層類,mObserverMap:存放了所有觀察者—>反射拿到觀察者的class對象—>mInfo:存放了所有帶註解的方法@OnLifecycleEvent(Lifecycle.Event.ON_CREATE))—> mMethod.invoke(target,source)—>調用相應api,需要監聽哪個聲明周期則重寫哪個方法就好

mState:從左往右,從右往左返回狀態值 監聽生命周期需要實現lifecycleObserver接口

二、liveData

liveData是一個數據持有類

  • 能夠感知組件的生命周期,確保僅更新活躍組件
  • 不會因Activity停止而導致崩潰,如果觀察者的生命周期處於非活躍狀態(如返回棧中的 Activity),則它不會接收任何 LiveData 事件
  • 持有的數據可被觀察者觀察,在底層數據更改時通知視圖
  • 一對多觀察者:觀察者會綁定lifecycle對象,在生命周期結束時會自我清理(不會發生內存泄露)
  • 共享資源:可以使用單例模式擴展 LiveData 對象以封裝系統服務,以便在應用中共享它們。

liveData使用:

  • MutableLiveData:LiveData(抽象類)的子類
  • liveData.postValue():可在任意線程下執行(切換線程操作)
  • liveData.setValue():只能在主線程中執行
  • liveData.observe():註冊觀察者
  • observe()源碼:註冊觀察者保存在mObserves(map)中
  • 感知生命周期:owner.getLifecycle().addObserver(wapper),改變時調用onstatechanged()

觀察者有兩種情況會被回調:

1、postValue時會遍歷觀察者然後回調

2、當組件生命周期發生變化或者第一次註冊觀察者時回調

粘性事件:

這裡得滿足兩個條件會觸發粘性事件 1.數據發送早於註冊監聽 2.監聽者的owner生命周期進入活躍狀態

三、ViewModel和DataBinding

  • viewModel:注重以生命周期的方式存儲和管理界面相關數據,不受activity生命周期影響
  • 數據持久化:生命周期不受限制
  • 異步回調問題不會造成內存泄露
  • 隔離model層和view層:解耦
  • Fragment間共享數據
  • DataBinding:實現雙向綁定,數據和UI同步

作用:當數據源發生改變時,及時更新給UI(p層做的事情交給系統源碼去做)

四、Navigation和Fragment

Navigation:導航(回退棧)

三大件:

Navigation Graph:導航圖,包含了所有導航相關信息的XML資源。一般防止在res/navigation目錄下

NavHost:容器,用來顯示Fragment的,即Activity中的fragment,要求實現NavHost

NavController:在NavHost中管理應用導航的對象

一句話就是,通過NavController,獲取當行圖中的特定路徑以及目標,導航到特定的目標放到NavHost中

Navigation是用來管理Fragment的切換,並且可以通過可視化的方式,看見APP的交互流程。

優勢:

1、可視化的頁面導航圖,可以編輯各個組件之間的跳轉關係 2、優雅的支持Fragment之間的轉場動畫 3、通過第三方的插件(SafeArgs(Gradle插件))支持Fragment之間類型安全的參數傳遞 4、通過NavigationUI類,對菜單,底部導航,抽屜菜單導航進行方便統一的管理 5、支持通過deeplink直接定位到Fragment

五、Room資料庫

輕量級orm資料庫(關係映射型),本質上sqlite抽象層,類似於Retrofit庫,Room在開發階段通過註解標記相關功能,編譯時自動生成impl實現類

資料庫框架的兩種實現思路:

關係映射型(orm):根據類對象通過反射的手段獲取到類名以及成員變量名作為表名和欄位名

缺點:無法確定類對象中有哪些成員不需要創建表欄位

註解+反射:每個業務模塊完全獨立,不浪費資源,要自定義註解和處理註解

Room三大件:

1、Entity:實體類,對應的是資料庫的一張表結構。需要使用註解 @Entity 標記。 2、Dao:包含訪問一系列訪問資料庫的方法。需要使用註解 @Dao 標記。 3、Database:資料庫持有者,作為與應用持久化相關數據的底層連接的主要接入點。需要使用註解 @Database 標記。 使用@Database註解需滿足以下條件: 1)定義的類必須是一個繼承於RoomDatabase的抽象類。 2)在註解中需要定義與資料庫相關聯的實體類列表。 3)包含一個沒有參數的抽象方法並且返回一個帶有註解的 @Dao。

六、workManager

workManager:可延遲運行,並在應用退出或重啟時能可靠運行任務

應用場景:埋點上傳,非即時性上傳與下載,同步數據和處理數據

三大件:

1、Worker:我們要執行的具體任務。需要繼承Worker,重寫doWork方法,然後在裡面寫具體的邏輯。 2、WorkRequest:上面的Worker是定義了我們要在後台的任務,而這個類是對Worker的包裝。 下面兩個都是繼承了WorkRequest: OneTimeWorkRequest: 只執行一次的任務 PeriodicWorkRequest: 重複執行的任務(重複間隔大於15分鐘) 3、WorkManager:是對WorkRequest的管理類。

七、pager

pager:分頁加載

三大件:

  • DataSource:數據源,獲取數據
  • pagedList:承載數據,可理解為一頁數據的集合
  • pagedListAdapter:對RecyclerViewAdapter的一個擴展

以上就是Jetpack的各大常用組件介紹;有關更多Jetpack的學習或者Android技術的進階,大家可以參考這本免費的電子冊《Android核心進階技術手冊》裡面包含Android開發的各個技術點。整理不易,多點讚+轉發收藏哦!

【私信:「手冊」領取】Android核心進階技術手冊

總結

Jetpack的出現代表谷歌標準化開發模式的推進,代表了Android開發的未來大致方向,意味著Android發展已經從碎片化轉向統一化。現在大多公司的android崗位都開始要求或者以會kotlin,jetpack為加分項以後jetpack開發也將成為大趨勢。

jetpack單個庫的學習比較簡單,但在正規的項目中都是要聯在一起使用的。而且由於使用jetpack的原因,項目都比較精簡,如果運用不熟練,改bug或者開發新功能就會很難下手。大家學習jetpack的時候要把常用的庫理解清楚,這樣就會在jetpck項目框架的理解和功能的開發方面有更好的方案。

關鍵字: