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

Android Activity 實例狀態保存:onSaveInstanceState 僅在系統回收時觸發

     編輯:程式設計疑難解答

現象

重寫 onSaveInstanceState(Bundle) 保存數據,手動銷毀 Activity(如按 Back 鍵或 finish()),再次啟動時 onCreate(Bundle) 參數為 null。

原因

onSaveInstanceState 不保證被調用。僅在以下情況觸發:

  • 系統因內存不足殺死進程后重建 Activity。
  • 配置變更(旋轉屏幕、語言切換)導致 Activity 重建。
  • 用戶按 Home 鍵切到后台,系統可能為釋放內存而殺死進程。

手動調用 finish() 或按 Back 鍵屬于「用戶主動關閉」,系統認為無需保存狀態,直接銷毀,不調用 onSaveInstanceState,再次啟動屬于冷啟動,Bundle 為 null。

正確持久化策略

現代最佳實踐

  • 使用 ViewModel 存儲 UI 相關數據,配置變更自動保留,進程死亡需配合 SavedStateHandle。
  • 重要業務數據實時保存至本地 DB,不依賴 Activity 生命週期。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
數據類型存儲方案
臨時 UI 狀態(滾動位置、輸入框文本)onSaveInstanceState / ViewModel
用戶偏好設置、登錄 TokenSharedPreferences / DataStore
業務數據(草稿、購物車)本地數據庫 Room / 文件 / 服務器同步