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

Android Activity 生命周期與狀態保存:Home 鍵退出後恢復頁面機制

     編輯:程式設計疑難解答

核心機制

按 Home 鍵 → onPause() → onStop()(Activity 進入後台)。再次啟動 → onRestart() → onStart() → onResume()。**默認情況下,Activity 實例未被銷毀,頁面狀態自動保留**。

關鍵生命周期方法

場景調用順序是否銷毀
按 HomeonPause → onStop否
再次啟動onRestart → onStart → onResume否
系統內存不足殺進程onPause → onStop → 進程死亡是
進程死後重建onCreate → onStart → onResume重建

數據持久化策略

1. 臨時 UI 狀態:onSaveInstanceState / onRestoreInstanceState

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("input_text", editText.getText().toString());
    outState.putInt("scroll_pos", listView.getFirstVisiblePosition());
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    editText.setText(savedInstanceState.getString("input_text"));
    listView.setSelection(savedInstanceState.getInt("scroll_pos"));
}
  • 適用於:進程被殺後重建時恢復 UI 細節。
  • 不適用於:大數據、長期保存。

2. 業務數據:ViewModel + LiveData (Jetpack)

public class MyViewModel extends ViewModel {
    private MutableLiveData> data = new MutableLiveData<>();
    // 數據在配置變更、進程重建中存活
}

3. 長期持久化:Room / SharedPreferences / DataStore

常見誤區

  • 以為 onDestroy 後數據自動保留 → 進程死則數據全失,必須主動持久化。
  • 在 onPause 做耗時存儲 → 導致 ANR,應用 ViewModel 或異步存儲。

總結

Home 鍵退出後頁面恢復,核心在於 **Activity 未被銷毀**(進程存活)。系統自動保留視圖層級狀態;開發者需在 onSaveInstanceState 保存輸入框、滾動位置等臨時狀態,業務數據交給 ViewModel,長期數據落地數據庫。理解生命周期是 Android 開發基本功。

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