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

Android Activity 數據傳遞與生命周期衝突解決方案:使用 Service 或 ViewModel 持久化臨時數據

     編輯:程式設計疑難解答

問題核心

A → B → A 傳遞數據時,若用 startActivity 重新啟動 A,舊 A 實例 onDestroy 清除臨時數據;若用 startActivityForResult,B finish 後 A 接收數據,但用戶按 Back 會退出應用而非返回 B。

方案對比

方案適用場景缺點
ViewModel (Architecture Components)Activity 間共享數據、配置變更保持需引入 lifecycle 库
Service (前台/後台)長期運行、跨進程數據生命周期管理複雜、可能被系統殺死
Application 子類單例全局輕量級緩存進程死掉數據丟失、內存洩漏風險
文件/SharedPreferences 持久化需跨進程/重啟保持IO 開銷、序列化成本

推薦:ViewModel

// SharedViewModel.kt
class SharedViewModel : ViewModel() {
    val tempData = MutableLiveData<String>()
}

// Activity A
val model = ViewModelProvider(this)[SharedViewModel::class.java]
model.tempData.observe(this) { data -> updateUI(data) }

// Activity B
val model = ViewModelProvider(requireActivity())[SharedViewModel::class.java] // 同一 Activity 對應同一 ViewModelStore
model.tempData.postValue("from B")

注意:跨 Activity 共享 ViewModel 需使用同一 ViewModelStoreOwner(如 requireActivity() 在 Fragment 中,或自定義 ViewModelStore)。

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