首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 異步數據傳遞:從 Handler 線程安全地將解析數據傳遞給 UI 初始化方法

     編輯:程式設計疑難解答

問題場景

在 Handler 子線程中解析 JSON 獲取圖片 URL 列表,需傳遞給 initViews() 進行 UI 綁定。直接使用 Intent 或靜態 Map 傳遞存在線程安全與生命周期隱患。

方案對比

方案優點缺點
靜態 Map (HealthMap)簡單直接內存洩漏風險、進程重啟數據丟失、多線程併發需自行加鎖
EventBus / RxBus解耦、支持 Sticky 事件引入三方庫、事件類膨脹
LiveData + ViewModel生命周期感知、配置變更自動恢復、線程安全需引入 Architecture Components
接口回調零依賴、類型安全需手動管理引用防洩漏

推薦:LiveData + ViewModel

// 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 實現跨線程數據傳遞,兼顧安全性與生命周期管理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved