從 Activity A 通過 startActivityForResult 跳轉到 Activity B,按 Back 返回 A 時,滾動位置、輸入框文本等 UI 狀態丟失。核心解決:**正確實現狀態保存/恢復機制**,而非依賴啟動模式。
EditText、ScrollView 等視圖**必須設置 `android:id`** 才能自動參與系統默認的狀態保存 (基於 View ID 存儲)。<EditText android:id="@+id/et_input" ... />
<ScrollView android:id="@+id/sv_container" ... > ... </ScrollView>
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState); // 必須調用父類,保存 View 狀態
outState.putString("custom_key", customValue);
outState.putInt("scroll_pos", scrollView.getScrollY());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
customValue = savedInstanceState.getString("custom_key");
scrollView.post(() -> scrollView.scrollTo(0, savedInstanceState.getInt("scroll_pos")));
}
class MyViewModel(SavedStateHandle handle) : ViewModel() {
var text by handle.getLiveData("input_text", "")
var scrollY by handle.getLiveData("scroll_y", 0)
}
自動處理配置變更、進程死亡重建,推薦新項目採用。
Android 生命周期核心:**假設 Activity 隨時會被銷毀重建**,在 onSaveInstanceState / ViewModel 中持久化所有不可重算的 UI 狀態,是專業開發者的基本功。