在 Handler 子線程中解析 JSON 獲取圖片 URL 列表,需傳遞給 initViews() 進行 UI 綁定。直接使用 Intent 或靜態 Map 傳遞存在線程安全與生命周期隱患。
| 方案 | 優點 | 缺點 |
|---|---|---|
| 靜態 Map (HealthMap) | 簡單直接 | 內存洩漏風險、進程重啟數據丟失、多線程併發需自行加鎖 |
| EventBus / RxBus | 解耦、支持 Sticky 事件 | 引入三方庫、事件類膨脹 |
| LiveData + ViewModel | 生命周期感知、配置變更自動恢復、線程安全 | 需引入 Architecture Components |
| 接口回調 | 零依賴、類型安全 | 需手動管理引用防洩漏 |
// ViewModel
class MyViewModel : ViewModel() {
val imageUrls = MutableLiveData<List<String>>()
fun fetchData() {
viewModelScope.launch(Dispatchers.IO) {
val urls = parseJsonFromNetwork()
imageUrls.postValue(urls) // 自動切換主線程
}
}
}
// Activity/Fragment
viewModel.imageUrls.observe(this) { urls ->
initViews(urls) // 安全更新 UI
}現代 Android 開發首選 LiveData + ViewModel 實現跨線程數據傳遞,兼顧安全性與生命周期管理。