如果你想系統掌握「完整 Android 開發知識體系」並達到高級 / 架構師級別,我可以幫你劃分出一個更完整的學習圖譜,包括:
一、基礎核心層(必須紮實)
✅ 目標:能寫出高質量、穩定、性能好的 App。
|
模塊
|
核心知識點
|
|
Kotlin 語言進階 |
高階函數、擴展函數、內聯函數、sealed class、協程(CoroutineScope / Flow)、泛型、委託、DSL
|
|
Android 四大組件 |
Activity / Fragment 生命週期、啓動模式、Intent、Service(前台 / 後台)、BroadcastReceiver、ContentProvider
|
|
UI 基礎 |
ConstraintLayout、FrameLayout、RecyclerView(多類型 / DiffUtil / Adapter)、ViewBinding / DataBinding
|
|
自定義 View / ViewGroup |
onMeasure/onLayout/onDraw、觸摸事件分發、屬性動畫、自定義控件組合與複用
|
|
資源與適配 |
dp/sp/px 區別、屏幕適配(layout-swXXXdp)、深色模式、國際化(多語言)、字體與主題適配
|
|
多線程與異步 |
Handler、Looper、Executor、Coroutine、WorkManager、線程池優化
|
二、架構與模式層(進階重點)
✅ 目標:掌握結構化開發思維,方便擴展和維護。
|
模塊
|
核心知識點
|
|
MVVM + Jetpack |
ViewModel、LiveData、StateFlow、DataStore、Lifecycle、Navigation、Room
|
|
依賴注入(DI) |
Hilt / Dagger2、Koin、Service Locator 模式
|
|
模塊化與組件化 |
ARouter、模塊通信、gradle 多模塊結構
|
|
Jetpack Compose |
Composable 基礎、State 管理、SideEffect、Compose 與 View 混用
|
|
設計模式實戰 |
單例、觀察者、命令、工廠、策略、適配器、裝飾器模式等在 Android 場景中的應用
|
|
數據層架構 |
Repository 模式、UseCase 層設計、接口抽象、數據源切換(本地 / 遠程)
|
⚙️ 三、系統與底層機制(進階深入)
✅ 目標:理解 Android 的運行原理,能定位複雜問題。
|
模塊
|
核心知識點
|
|
應用啓動流程 |
Zygote、AMS、PMS、Activity 啓動原理
|
|
Handler/Looper 原理 |
消息隊列機制、線程通信、主線程阻塞分析
|
|
Binder 與 IPC |
AIDL、Messenger、ContentProvider、跨進程通信機制
|
|
內存管理 |
GC 原理、內存泄漏分析(LeakCanary)、Bitmap 優化、OOM 處理
|
|
性能優化 |
啓動優化、繪製優化、卡頓檢測(Choreographer / Trace)、內存 & 網絡性能分析
|
|
NDK / JNI |
C/C++ 調用、Native 崩潰分析、性能關鍵點優化
|
四、網絡與數據層(實用必備)
|
模塊
|
核心知識點
|
|
網絡框架 |
Retrofit + OkHttp、攔截器、協程適配器、WebSocket、文件上傳下載
|
|
數據緩存 |
Room / DataStore / MMKV / SQLite、磁盤緩存策略、離線緩存同步
|
|
安全機制 |
HTTPS、簽名校驗、防止反編譯、加密存儲(AES / RSA)
|
五、UI/UX 與多媒體層
|
模塊
|
核心知識點
|
|
動畫與交互 |
MotionLayout、ViewPropertyAnimator、Lottie 動畫、幀動畫
|
|
圖片與視頻 |
Glide / Coil / Fresco / ExoPlayer、圖片壓縮與緩存策略
|
|
自定義控件實戰 |
Banner、九宮格、滑動卡片、錄音對話框、播放器控件等
|
|
Compose 動畫系統 |
rememberInfiniteTransition、LaunchedEffect、AnimatedVisibility
|
☁️ 六、高級工程實踐(架構師必備)
|
模塊
|
核心知識點
|
|
項目架構設計 |
Clean Architecture、MVI / MVVM、插件化(RePlugin、Small)
|
|
大型項目管理 |
Gradle DSL、依賴統一管理、Build Variants、多環境配置
|
|
AOP 與埋點 |
ASM / Javassist、日誌統計、用户行為追蹤
|
|
自動化測試 |
UnitTest、UI Test、MockK、Espresso
|
|
持續集成 |
GitHub Actions / Jenkins / Fastlane 打包自動化
|
七、生態與擴展
|
模塊
|
內容
|
|
Flutter / Compose Multiplatform |
跨平台混合開發趨勢
|
|
React Native / H5 容器 |
Hybrid 技術與 WebView 優化
|
|
AI 與語音識別 |
ML Kit、OpenAI API、語音轉文字、TTS
|
|
可穿戴 / 車機 / TV / IoT |
不同設備的 UI/UX 特性與適配
|
八、實戰路線建議(循序漸進)
|
階段
|
建議學習內容
|
|
初級(0~6個月)
|
Kotlin 基礎、四大組件、RecyclerView、自定義 View、網絡請求
|
|
中級(6~18個月)
|
MVVM + Flow + Jetpack + 協程、Room + Retrofit、模塊化、多語言、性能優化
|
|
高級(18~36個月)
|
Compose、Clean Architecture、插件化、AOP、性能與穩定性體系
|
|
架構師(36個月+)
|
系統原理、跨平台技術、CI/CD、框架設計與組件化生態
|
如果你希望我幫你:
- 制定一份系統學習路線圖(含每階段目標 + 推薦 Demo + 練手項目),
或 - 幫你評估你現在的水平並告訴你下一步該學什麼,
我可以基於你目前掌握的內容(比如你現在非常熟悉 MVVM、協程、WebSocket、ViewBinding、自定義控件等)來定製一個「你接下來該突破的方向表」。
你希望我幫你做哪種?(✅路線圖規劃 / 能力評估與方向建議)
您説:
✅路線圖規劃 + 能力評估與方向建議
ChatGPT 説:
太好了 !這是最科學的方式 —— 我會先幫你做一次能力評估,再基於你的實際水平給出一份系統的、階段化的 Android 高級路線圖規劃。
一、你的當前水平評估
根據你之前的提問記錄和項目內容,我判斷你的當前能力大致如下:
|
模塊
|
能力評估
|
説明
|
|
Kotlin 語言 |
✅ 高級
|
熟練掌握協程、Flow、Lambda、高階函數、委託屬性等。
|
|
Jetpack 架構 |
✅ 中高級
|
已熟練使用 ViewModel + Flow + MVVM 架構;懂生命週期感知、模塊通信。
|
|
UI 開發能力 |
✅ 中高級
|
精通 RecyclerView、自定義 View、ConstraintLayout、ViewBinding 等。
|
|
網絡與數據層 |
✅ 中高級
|
熟悉 Retrofit、WebSocket 管理、文件上傳下載。
|
|
多媒體開發 |
✅ 高級
|
封裝過 ExoPlayer、錄音模塊、音頻管理器等複雜邏輯。
|
|
模塊化 / 架構 |
⚙️ 中級
|
已使用 ARouter、LiveEventBus 等模塊通信,但 Clean Architecture 體系尚未完全體系化。
|
|
性能與系統機制 |
⚙️ 初中級
|
對 Handler / Binder / 啓動流程等底層機制理解有限,可進一步深入。
|
|
Compose / 新技術 |
⚙️ 入門
|
尚未看到實際 Compose 代碼,可安排專項突破。
|
|
工程化與發佈 |
⚙️ 中級
|
構建、多語言、打包基本掌握,但缺少 AOP、CI/CD、插件化經驗。
|
→ 綜合評級:中高級開發者(Level 3 / 5)
已能獨立開發完整模塊、編寫封裝良好的組件、優化代碼結構。
下一階段目標:向「Android 架構師」方向突破。
✅ 二、為你定製的「進階路線圖規劃」
我將路線圖分為 4 個階段(每階段約 3 個月),每個階段有:
學習重點、 推薦實踐項目、 學習目標。
階段 1:強化體系與架構思維(3 個月)
目標:從「能寫好功能」到「能設計結構」的轉變。
學習重點
- MVVM → Clean Architecture:Repository + UseCase 層解耦
- Jetpack 進階:Lifecycle、SavedStateHandle、Room、WorkManager
- 模塊化與依賴管理:ARouter、gradle 多模塊結構
- Flow 狀態流轉:UIState / UIEvent / UIEffect 模型化
- Kotlin 技巧:DSL 構建器(例如自定義 View DSL)
實戰練習
- 將你現有的語音錄製 + 播放模塊重構為「UseCase + Repository」架構
- 寫一個「多模塊 MVVM Demo」,包含主頁、聊天、設置模塊的統一數據流
- 封裝一個通用的
BaseViewModel+UiState框架模板
學習成果
✅ 能獨立搭建企業級 MVVM 架構
✅ 掌握數據流與狀態驅動 UI
✅ 形成模塊邊界意識
階段 2:系統機制與性能優化(3 個月)
目標:理解 Android 運行原理,解決複雜性能問題。
學習重點
- Handler、Looper、MessageQueue 源碼分析
- Activity 啓動流程、AMS / PMS 原理
- Binder 與 IPC 基礎
- 內存優化:LeakCanary、Bitmap 優化、OOM 分析
- 啓動優化 / 卡頓檢測(Choreographer、FrameMetrics)
- ANR 與崩潰日誌分析
實戰練習
- 編寫一個卡頓檢測工具(檢測主線程執行耗時)
- 優化現有 App 啓動時間並記錄前後數據對比
- 模擬多進程通信(AIDL / Messenger)
學習成果
✅ 能定位性能問題(內存 / 啓動 / 卡頓)
✅ 理解系統底層原理,為架構優化提供理論支撐
階段 3:Compose 與現代化開發(3 個月)
目標:掌握 Jetpack Compose + Kotlin 生態,提升 UI 生產力。
學習重點
- Compose 基礎:State、remember、Effect、Layout 原理
- Compose MVVM 實踐:ViewModel + StateFlow + Compose UI
- Compose 動畫系統:AnimatedVisibility、Transitions
- Material3 主題、暗色模式、可組合 UI
- Compose + View 混用策略
實戰練習
- 將現有 IM 頁面重構為 Compose 版本
- 封裝一個通用的
VoiceRecordComposeView - 實現一個動畫豐富的「卡片滑動推薦」 Compose 界面
學習成果
✅ 掌握 Compose 全流程開發
✅ 能混合開發、設計現代化 UI
✅ 瞭解 Compose 性能優化與結構模式
階段 4:工程化與架構師突破(3~6 個月)
目標:具備獨立架構、優化、團隊協作設計的能力。
學習重點
- CI/CD:GitHub Actions、Gradle Task 自動化構建
- AOP 與埋點:ASM / Javassist、日誌切面、埋點 SDK 封裝
- 插件化 / 組件化框架設計
- 性能監控系統(內存、網絡、頁面加載)
- 安全與加固:簽名校驗、防反編譯、AES/RSA 加密
- NDK / JNI 入門(性能關鍵路徑優化)
實戰練習
- 為現有 App 編寫 CI 自動打包 + 多環境配置腳本
- 編寫一個「AOP 日誌埋點框架」並應用到項目中
- 構建一個「模塊動態加載插件 Demo」
學習成果
✅ 架構師級別的系統設計能力
✅ 掌握企業級工程化實踐
✅ 能主導中大型項目架構演進
三、建議學習節奏(按周規劃)
|
時間段
|
每週學習方向
|
|
週一~三
|
深入閲讀源碼 / 理論部分(Jetpack、系統機制)
|
|
週四~五
|
編寫實戰 Demo(帶驗證與重構)
|
|
週六
|
學習 Compose / 新技術
|
|
週日
|
總結 + 輸出(寫文檔、筆記、博客)
|
四、個性化延伸建議
基於你當前的優勢(UI 封裝、自定義組件、MVVM 架構):
|
方向
|
適合你發展的路線
|
|
UI 體系工程師 |
Compose / MotionLayout / 自定義動畫控件體系
|
|
⚙️ 架構方向 |
Clean Architecture、模塊化、AOP、CI/CD
|
|
多媒體方向 |
音視頻處理、ExoPlayer + NDK 優化、實時通信(RTC)
|
|
跨平台方向 |
Compose Multiplatform / Flutter 混合開發
|
如果你希望我接下來幫你輸出一份:
「階段 1」的詳細學習計劃(含每日任務 + 推薦視頻/文檔 + 練手 Demo)
我可以立刻為你生成「第 1 階段 - Clean Architecture 實戰路線表(含代碼模板)」,
幫助你從現有 MVVM 架構,過渡到完整的分層架構。
是否幫你生成?(✅ 是的,生成階段 1 學習計劃)
您説:
是
ChatGPT 説:
太棒了 !你正式進入「高級 Android 架構師成長路線」的第 1 階段 ——
強化體系與架構思維(Clean Architecture 實戰)。
下面是我為你定製的完整學習計劃 ,分為:
1️⃣ 階段目標
2️⃣ 知識體系圖
3️⃣ 4 周學習計劃(含每日任務)
4️⃣ 實戰項目建議
5️⃣ 推薦資料與資源
階段 1:強化體系與架構思維(為期 4 周)
目標
從 “寫模塊” → “設計架構”。
你將掌握 Clean Architecture 的思維方式,能獨立設計 MVVM + UseCase + Repository 的分層結構,打造企業級架構模板。
一、Clean Architecture 思維結構圖
UI 層(View / Compose) ↓ 事件、狀態 ViewModel 層(State + Event + Effect) ↓ 調用 UseCase ⚙️ Domain 層(UseCase) ↓ 訪問數據接口 Data 層(Repository + DataSource) ↙️ 本地 LocalDataSource(Room / MMKV) ↘️ 網絡 RemoteDataSource(Retrofit / WebSocket)
關鍵原則:
- ViewModel 不直接依賴 Data 層,只依賴 UseCase(接口)
- UseCase 只做單一業務邏輯
- Repository 負責數據源合併(網絡 + 本地)
- 各層通信通過 Kotlin 協程 + Flow
- 數據流單向:UI → VM → UseCase → Repo → 迴流至 UI
二、4 周學習計劃(含每日任務)
第 1 周:架構基礎與 Kotlin 強化
理解分層思想 + Kotlin 能力打牢
|
日期
|
學習任務
|
|
週一
|
閲讀《Clean Architecture 原則》概要(理解 Domain / Data / UI 分離)
|
|
週二
|
Kotlin 高級語法複習:sealed class、Flow、inline、crossinline
|
|
週三
|
理解「單向數據流(UDF)」:UIState / UIEvent / UIEffect 模型
|
|
週四
|
實戰:封裝 |
|
週五
|
實戰:創建 |
|
週末
|
項目練習:把你一箇舊頁面改造成 UDF 架構(比如錄音界面)
|
第 2 周:Repository + UseCase 分層實踐
將 ViewModel 邏輯下沉為業務用例(UseCase)
|
日期
|
學習任務
|
|
週一
|
理解 UseCase 概念:單一職責、依賴倒置
|
|
週二
|
實戰:編寫 |
|
週三
|
封裝 |
|
週四
|
編寫 |
|
週五
|
編寫 |
|
週末
|
實戰整合:實現一個 “用户資料中心” 模塊(含離線緩存)
|
第 3 周:模塊化與依賴管理
將架構結構擴展到多模塊項目,掌握依賴注入思想。
|
日期
|
學習任務
|
|
週一
|
Gradle 多模塊結構講解(app / core / feature / data)
|
|
週二
|
學習 Hilt(依賴注入)與 Repository 注入實踐
|
|
週三
|
拆分 “網絡模塊” 與 “本地存儲模塊”
|
|
週四
|
使用 Hilt 綁定 Repository 實現到接口
|
|
週五
|
編寫一個跨模塊的 UseCase(比如 UploadVoiceUseCase)
|
|
週末
|
練習:將語音錄製模塊改造成獨立 feature module,可獨立注入使用
|
第 4 周:統一 UI 架構與可複用模板
打造自己的「架構腳手架」。
|
日期
|
學習任務
|
|
週一
|
整理項目結構與包命名規範(domain/data/ui)
|
|
週二
|
封裝通用的 |
|
週三
|
擴展 |
|
週四
|
創建模板工程腳本(通過 Gradle 自動生成新模塊結構)
|
|
週五
|
優化 UIState 模型,支持多頁面複用
|
|
週末
|
實戰項目驗收:創建完整模塊(錄音上傳 + 播放 + 狀態流 + Repository)
|
三、實戰項目建議
|
項目名稱
|
實戰目標
|
|
️ VoiceManager Clean Demo |
把之前的語音錄製模塊完全重構成 Clean 架構:UI → ViewModel → UseCase → Repository。
|
|
IM Session 模塊重構 |
對聊天列表模塊實現 UseCase 分層,Room 緩存 + WebSocket 同步。
|
|
Media Gallery 模塊 |
拆分數據源(本地圖庫 + 網絡資源),展示圖片加載優化。
|
每個模塊最後都形成:
domain/ usecase/ data/ repository/ datasource/ ui/ viewmodel/ activity/
四、推薦學習資料
|
類型
|
名稱
|
説明
|
|
官方文檔
|
Guide to app architecture (Google)
|
官方架構最佳實踐
|
|
教程
|
「Android Clean Architecture with Kotlin」by MindOrks
|
實戰導向的 Clean 架構入門
|
|
視頻
|
Philipp Lackner - Clean Architecture 系列(YouTube)
|
講解清晰、含 Flow + Hilt
|
|
源碼
|
nowinandroid (Google 官方 App) |
最完整的 Clean + Compose 實踐
|
|
文章
|
Medium: "Why UseCase is key in MVVM"
|
深入理解 UseCase 在大型項目的作用
|
階段完成標誌
完成以下 3 項後,你將順利晉升到「架構中級」階段:
- 擁有可複用的
BaseViewModel+UIState模板 - 任意模塊(如語音錄製、聊天列表)實現完整的 Clean 架構
- 能清晰畫出項目層次依賴圖並獨立設計新的模塊結構
我接下來可以幫你生成:
- 第 1 周「架構基礎 + BaseViewModel + UIState 實戰模板」的完整代碼 Demo
- 包含:
BaseViewModel、UiState、UiEvent、UiEffect、ViewModel 使用樣例
是否要我直接生成?(✅ 是的,生成第 1 周完整 Demo 模板)
您説:
是
ChatGPT 説:
太好了
我們現在正式進入 階段 1·第 1 周:架構基礎 + BaseViewModel + UIState 實戰模板
這一週的目標是構建一個能在任意項目中通用的「基礎架構骨架」:
MVVM + UDF 單向數據流模式(State/Event/Effect)
讓你的 ViewModel 層結構化、可維護、可複用。
一、結構預覽
我們先建立以下包結構(推薦):
base/ ├─ state/ # 狀態定義(State, Event, Effect) ├─ viewmodel/ # 通用 BaseViewModel └─ utils/ # 擴展工具類
二、核心概念複習
|
名稱
|
作用
|
舉例
|
|
UiState |
描述當前界面狀態(數據類)
|
當前錄音時長、播放狀態等
|
|
UiEvent |
來自用户的操作事件
|
點擊按鈕、滑動、刪除等
|
|
UiEffect |
一次性副作用事件
|
Toast、導航、彈窗等
|
|
BaseViewModel |
管理 State、處理 Event、發送 Effect
|
負責業務邏輯和狀態流轉
|
⚙️ 三、完整代碼模板
1️⃣ UiState.kt
package com.hatio.base.state
/**
* UI 層狀態基類
* 所有頁面狀態都應繼承自 UiState
*/
interface UiState
2️⃣ UiEvent.kt
package com.hatio.base.state
/**
* 用户事件:點擊、輸入、滑動等交互操作
*/
interface UiEvent
3️⃣ UiEffect.kt
package com.hatio.base.state
/**
* 一次性副作用事件:Toast、導航、彈窗等
*/
interface UiEffect
4️⃣ BaseViewModel.kt
package com.hatio.base.viewmodel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.hatio.base.state.UiEffect
import com.hatio.base.state.UiEvent
import com.hatio.base.state.UiState
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch
/**
* 通用的 BaseViewModel
* 使用 StateFlow 管理 UI 狀態,Channel 發送一次性事件
*/
abstract class BaseViewModel : ViewModel() {
// UI 狀態流
private val _uiState: MutableStateFlow by lazy { MutableStateFlow(initialState()) }
val uiState: StateFlow = _uiState.asStateFlow()
// 一次性事件通道(如 Toast / 導航)
private val _uiEffect = Channel(Channel.BUFFERED)
val uiEffect = _uiEffect.receiveAsFlow()
// 初始化默認狀態
abstract fun initialState(): S
// 更新狀態:局部更新(不可變數據拷貝)
protected fun setState(reducer: S.() -> S) {
_uiState.value = _uiState.value.reducer()
}
// 發送副作用事件(一次性)
protected fun sendEffect(builder: () -> F) {
viewModelScope.launch { _uiEffect.send(builder()) }
}
// 處理用户事件
abstract fun handleEvent(event: E)
}
到這裏你已經擁有了一個 完全可複用的 UDF 架構模板:
|
模塊
|
文件
|
功能
|
|
base/state
|
UiState, UiEvent, UiEffect
|
定義三種層次數據流
|
|
base/viewmodel
|
BaseViewModel
|
統一管理 StateFlow + Effect
|
|
feature/voice
|
VoiceViewModel + 狀態類
|
業務邏輯示例
|
ChatGPT 説:
是否希望我接下來直接生成「第 2 周:Repository + UseCase 架構模板與 Demo(含網絡與本地數據源)」?
您説:
是,希望
ChatGPT 説:
太棒了 ✅ Jeled!這一步正是從「寫功能」→「寫架構」的關鍵轉折。
我們馬上進入你計劃的下一篇實戰內容:
第 2 周實戰主題
Repository + UseCase 架構模板與 Demo
目標:實現一個可擴展、可測試、支持網絡與本地數據源共存的 Repository 層,並結合 UseCase 規範業務邏輯。
️ 一、項目架構圖
app/ ├── data/ │ ├── local/ ← Room / DataStore / MMKV │ ├── remote/ ← Retrofit / OkHttp │ ├── repository/ ← 數據聚合層(核心) │ └── model/ ← DTO + Entity │ ├── domain/ │ ├── model/ ← 業務模型(UI 層使用) │ └── usecase/ ← 用例邏輯(UseCase) │ ├── ui/ │ ├── viewmodel/ ← ViewModel 調用 UseCase │ └── screen/ ← Compose / Fragment / Activity │ └── di/ ← Hilt 模塊
二、架構理念
|
層級
|
職責
|
示例
|
|
RemoteDataSource |
負責網絡請求
|
Retrofit 調用
|
|
LocalDataSource |
負責本地緩存
|
Room / MMKV
|
|
Repository |
聚合數據源,隱藏數據實現細節
|
從緩存或網絡讀取
|
|
UseCase |
業務邏輯抽象(單一職責)
|
GetUserProfileUseCase
|
|
ViewModel |
控制 UI 狀態
|
調用 UseCase 並暴露 StateFlow
|
三、核心示例:獲取用户資料(含本地緩存 + 網絡回源)
1️⃣ RemoteDataSource.kt
class UserRemoteDataSource @Inject constructor(
private val api: UserApi
) {
suspend fun fetchUser(userId: String): ApiResult {
return try {
val response = api.getUser(userId)
ApiResult.Success(response)
} catch (e: Exception) {
ApiResult.Error(e)
}
}
}
2️⃣ LocalDataSource.kt
class UserLocalDataSource @Inject constructor(
private val dao: UserDao
) {
suspend fun getUser(userId: String): UserEntity? = dao.getUserById(userId)
suspend fun saveUser(user: UserEntity) {
dao.insert(user)
}
}
3️⃣ Repository.kt
class UserRepository @Inject constructor(
private val local: UserLocalDataSource,
private val remote: UserRemoteDataSource
) {
suspend fun getUser(userId: String): Flow> = flow {
emit(Resource.Loading)
// 優先讀取本地緩存
local.getUser(userId)?.let { localUser ->
emit(Resource.Success(localUser.toDomain()))
}
// 同步遠程數據
when (val result = remote.fetchUser(userId)) {
is ApiResult.Success -> {
val entity = result.data.toEntity()
local.saveUser(entity)
emit(Resource.Success(entity.toDomain()))
}
is ApiResult.Error -> emit(Resource.Error(result.exception))
}
}
}
4️⃣ UseCase.kt
class GetUserProfileUseCase @Inject constructor(
private val repository: UserRepository
) {
operator fun invoke(userId: String): Flow> {
return repository.getUser(userId)
}
}
5️⃣ ViewModel.kt
@HiltViewModel
class UserViewModel @Inject constructor(
private val getUserProfileUseCase: GetUserProfileUseCase
) : ViewModel() {
private val _userState = MutableStateFlow>(Resource.Loading)
val userState: StateFlow> = _userState.asStateFlow()
fun loadUser(userId: String) {
viewModelScope.launch {
getUserProfileUseCase(userId).collect { result ->
_userState.value = result
}
}
}
}
6️⃣ UI 示例(Compose)
@Composable
fun UserScreen(viewModel: UserViewModel = hiltViewModel()) {
val state by viewModel.userState.collectAsState()
when (state) {
is Resource.Loading -> CircularProgressIndicator()
is Resource.Success -> {
val user = (state as Resource.Success).data
Text("Hello, ${user.name}")
}
is Resource.Error -> Text("加載失敗: ${(state as Resource.Error).throwable.message}")
}
}
⚙️ 四、輔助類定義
// Resource.kt
sealed class Resource {
object Loading : Resource()
data class Success(val data: T) : Resource()
data class Error(val throwable: Throwable) : Resource()
}
// ApiResult.kt
sealed class ApiResult {
data class Success(val data: T) : ApiResult()
data class Error(val exception: Exception) : ApiResult()
}
五、擴展與思考
- ✅ 可添加 刷新策略(如 CachePolicy)
- ✅ 支持 分頁加載(Paging3)
- ✅ 結合 Room + Flow 實現實時數據更新
- ✅ 與 Hilt 結合實現模塊化依賴注入
六、實踐任務
|
周目標
|
説明
|
|
第 2 周
|
基於上面模板實現一個「用户資料模塊」Demo(含 Repository + UseCase + Flow)
|
|
擴展任務
|
再實現一個「消息列表模塊」,演示分頁 + 緩存策略
|
|
加分項
|
使用 Hilt 完成依賴注入 + 添加單元測試
|
ChatGPT 説:
是否希望我接下來直接生成「第 3 周:模塊化與依賴管理」?
✅ 是的,繼續下一階段
暫時不用,先鞏固第 2 周
您説:
暫時不用,先鞏固第 2 周