按 Home 鍵 → onPause() → onStop()(Activity 進入後台)。再次啟動 → onRestart() → onStart() → onResume()。**默認情況下,Activity 實例未被銷毀,頁面狀態自動保留**。
| 場景 | 調用順序 | 是否銷毀 |
|---|---|---|
| 按 Home | onPause → onStop | 否 |
| 再次啟動 | onRestart → onStart → onResume | 否 |
| 系統內存不足殺進程 | onPause → onStop → 進程死亡 | 是 |
| 進程死後重建 | onCreate → onStart → onResume | 重建 |
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"));
}
public class MyViewModel extends ViewModel {
private MutableLiveData> data = new MutableLiveData<>();
// 數據在配置變更、進程重建中存活
}
onDestroy 後數據自動保留 → 進程死則數據全失,必須主動持久化。onPause 做耗時存儲 → 導致 ANR,應用 ViewModel 或異步存儲。Home 鍵退出後頁面恢復,核心在於 **Activity 未被銷毀**(進程存活)。系統自動保留視圖層級狀態;開發者需在 onSaveInstanceState 保存輸入框、滾動位置等臨時狀態,業務數據交給 ViewModel,長期數據落地數據庫。理解生命周期是 Android 開發基本功。