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

Android Activity 變量重置:在 onCreate 初始化而非依賴 Intent 跳轉

     編輯:程式設計疑難解答

核心誤區

以為 Intent 跳轉會自動「重新建立」Activity 並重置變量。實則:

  • 標準啟動模式下,返回已存在的 Activity 實例會觸發 onRestart → onStart → onResume,**不會重新執行 onCreate**。
  • 成員變量隨實例存活,除非進程被殺或 Activity 被銷毀重建。

正確重置時機:onCreate

public class MyActivity extends AppCompatActivity {
    private int counter = 0;
    private List dataList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        // ✅ 這裡才是真正的「重置入口」
        counter = 0;
        dataList = new ArrayList<>();
        loadData(); // 重新載入資料
    }

    // ❌ 不要在 onStart/onResume 重置,會導致切換回前台時資料閃爍或重複載入
}

特殊場景處理

1. 需要「每次進入畫面」重新整理資料

@Override
protected void onResume() {
    super.onResume();
    refreshUI(); // 僅更新 UI 顯示,不重置核心狀態
}

2. 強制重新建立 Activity(如切換帳號、語言變更)

// 呼叫端
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish(); // 結束當前實例

3. 配置變更(旋轉螢幕、語言切換)導致重建

  • 若不想重建:android:configChanges="orientation|screenSize|locale" 並覆寫 onConfigurationChanged。
  • 若接受重建:在 onSaveInstanceState 保存臨時狀態,onCreate 中 savedInstanceState != null 時恢復。

總結

**變量重置請寫在 onCreate**,這是 Activity 生命週期中唯一保證「從零開始」的回調。跳轉邏輯請配合 Intent Flag 控制任務棧行為,而非期望框架自動重置。

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