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

Android Activity 生命週期:onCreate 與 onResume 差異與典型應用場景

     編輯:程式設計綜合問答

開發者發現專案中 Activity 僅覆寫 onCreate 與 onResume 兩個生命週期方法,詢問這是否正常。本文解析兩方法核心差異、典型使用場景與完整生命週期脈絡。

核心差異一覽表

你的代碼分析

// onCreate: 僅執行一次,適合初始化
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_news_detail);
    getWindow().setBackgroundDrawable(null);
    initView(); // findViewById 等 UI 綁定
}

// onResume: 每次進入前台都執行,適合刷新資料
@Override
protected void onResume() {
    super.onResume();
    Intent intent = getIntent();
    item = (BlogItem) intent.getSerializableExtra("item");
    if (item != null) {
        title.setText(item.getTitle());
        url = PATH + item.getId();
        loadBolgDetailInfo(url); // 網路請求/資料刷新
    }
}

這個設計模式的優點

  • 關注點分離:UI 建構 (onCreate) 與資料刷新 (onResume) 解耦
  • 支援返回刷新:用戶按 Home 鍵離開、再從桌面圖標回來時,onResume 會重新載入最新資料
  • 符合生命週期契約:onCreate 做昂貴的一次性初始化,onResume 做輕量級恢復

潛在問題與改進

特性onCreate(Bundle)onResume()
呼叫時機Activity 首次建立時 (冷啟動)Activity 進入前台、可見且可互動時
呼叫頻率生命週期中僅一次每次從後台/遮蔽狀態回到前台都會呼叫
典型工作UI 初始化、資料綁定、一次性設定恢復動畫、註冊監聽器、重新獲取焦點資料
Bundle 參數包含儲存的實例狀態 (旋轉螢幕等重建時)無參數
對應配對方法onDestroy()onPause()
問題風險改進
網路請求在 onResume頻繁切換觸發重複請求、ANR 風險加入載入狀態旗標、使用 ViewModel+LiveData 緩存、或改用 onNewIntent 處理新 Intent
getIntent() 可能取到舊 Intent啟動模式 singleTop 時需用 onNewIntent在 onNewIntent 更新 intent 參考:setIntent(intent)
未處理儲存狀態恢復旋轉螢幕導致資料重載onSaveInstanceState 保存 item ID,onCreate 恢復

完整生命週期脈絡圖


[啟動] → onCreate → onStart → onResume → [前台運行]
                                    ↑
[返回桌面/來電/彈窗] → onPause → onStop → [後台/可見但不可互動]
                                    ↑
[完全遮蔽/銷毀] → onDestroy → [進程結束]
                                    ↑
[配置變更/記憶體不足] → onSaveInstanceState → onDestroy → onCreate (重建)

最佳實踐速查表

生命週期建議操作避免操作
onCreatesetContentView、findViewById、ViewModel 初始化、一次性資料載入耗時網路請求、動畫啟動、註冊廣播接收器
onStartUI 可見前準備、開始動畫重度運算
onResume註冊監聽器、恢復攝影機/傳感器、刷新即時資料、開始前台服務耗時初始化 (應在 onCreate)、阻塞主執行緒
onPause取消註冊監聽器、暫停動畫、儲存草稿、提交變更耗時操作 (系統允許時間極短)、網路請求
onStop釋放大型資源 (Bitmap、資料庫連線)、停止位置更新UI 操作 (已不可見)
onDestroy最終清理、取消註冊系統級接收器依賴此方法釋放關鍵資源 (系統可能直接殺進程)

總結

僅覆寫 onCreate 和 onResume 是常見且合理的精簡模式,適合「UI 初始化一次、資料每次進前台刷新」的場景。但需注意:網路請求避免在 onResume 重複觸發、妥善處理 onNewIntent、配合 ViewModel 管理資料生命週期,才能構建健壯的 Android 應用。

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