當 ComponentActivity(以及 Fragment)選擇實現(xiàn) LifecycleOwner 接口并暴露 lifecycle 對象時,Google 官方實際上是在向全球 Android 開發(fā)者推行一場“權(quán)力交接”。
這體現(xiàn)了以下三個核心思想:
1. 從“命令式”轉(zhuǎn)向“聲明式” (From Imperative to Declarative)
-
官方初衷:官方希望開發(fā)者停止在 Activity 的生命周期方法(
onCreate,onStart,onResume...)里編寫瑣碎的控制邏輯。 - 體現(xiàn)的思想:控制反轉(zhuǎn) (Inversion of Control)。
- 舊思想:Activity 是“國王”,它必須親自指揮所有組件:“現(xiàn)在我啟動了,視頻播放器你快去初始化;現(xiàn)在我暫停了,你快去停止。”
-
新思想:Activity 只是一個“事件源”。組件(如你的
PermissionRefreshObserver)通過addObserver聲明自己的需求。Activity 不再需要主動指揮,邏輯由生命周期狀態(tài)驅(qū)動自動流轉(zhuǎn)。
2. 解決“關(guān)注點彌散”與“邏輯碎片化”
- 官方初衷:避免 Activity 變成一個數(shù)千行的 "God Object"。
- 體現(xiàn)的思想:關(guān)注點分離 (Separation of Concerns)。
- 在舊模式下,權(quán)限檢查、定位追蹤、視頻緩沖、數(shù)據(jù)埋點,這些完全不相關(guān)的邏輯全都塞在
onStart/onStop里,導致代碼極難維護。 - 通過暴露
lifecycle,官方允許你把這些邏輯各自封裝成獨立的LifecycleObserver。每個組件只關(guān)注自己的那一畝三分地,Activity 徹底淪為一個“生命周期容器”。
3. 處理“生命周期的不可預(yù)測性” (Defensive Robustness)
- 官方初衷:解決 Android 系統(tǒng)中臭名昭著的異步任務(wù)與生命周期不匹配導致的崩潰和內(nèi)存泄漏。
- 體現(xiàn)的思想:生命周期安全 (Lifecycle Safety)。
- 官方希望通過
lifecycle提供一個標準化的查詢窗口。 - 開發(fā)者可以隨時詢問
lifecycle.currentState。這意味著,當一個網(wǎng)絡(luò)回調(diào)返回時,你可以先問問:“這個 Activity 還活著嗎?”如果它已經(jīng)DESTROYED,就不要去操作 UI。這避免了無數(shù)IllegalStateException和Memory Leak。
4. 建立“統(tǒng)一的契約”
- 官方初衷:讓第三方庫能夠以無侵入的方式接入 Activity。
- 體現(xiàn)的思想:插件化架構(gòu) (Pluggable Architecture)。
- 比如 LiveDate, Room, WorkManager,甚至你用的 Compose,它們都依賴這個
lifecycle契約。 - 這意味著只要你的組件遵循這個契約,它就可以像“插拔件”一樣,掛載到任何
ComponentActivity上,而不需要修改 Activity 內(nèi)部的一行代碼。