許多初學者嘗試在 Activity 運行期間重複調用 onCreate() 以「重置」界面,但這違背 Android 生命周期設計。本文從框架層面解析原因,並給出正確的界面重置方案。
onCreate(Bundle) 是 Activity 生命周期的**入口方法**,由系統在進程啟動、Activity 首次創建時**僅調用一次**。其核心職責:
savedInstanceState)。setContentView())。系統通過 ActivityThread.performLaunchActivity() 確保單次調用,開發者**不應手動調用**。
文中示例代碼:
// 錯誤示範
@Override
public void onClick(View v) {
counter++;
this.onCreate(state); // 手動調用 onCreate
}
後果:
setContentView() 導致視圖層疊加、內存洩漏。onStart()/onResume() 異常。將可變內容封裝為 Fragment,通過 FragmentTransaction.replace() 實現熱插拔:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.container, new QuizFragment())
.commit();
同一 Activity 內切換佈局:
// 移除舊 View,添加新 View
container.removeAllViews();
View newView = LayoutInflater.from(this).inflate(R.layout.new_layout, container, false);
container.addView(newView);
// 或直接
setContentView(R.layout.new_layout); // 會重新初始化整個視圖樹
採用 ViewBinding + LiveData / StateFlow,僅更新數據,UI 自動響應,避免重建視圖。
onCreate() 是「出生證明」,一生只有一次。需要「換裝」時,請用 Fragment、View 切換或數據驅動,尊重生命周期契約。