在 Android 開發中,我們經常需要在 Activity 之間傳遞數據。通常情況下,使用 Intent.putExtra() 搭配 startActivity() 即可輕鬆實現。然而,當目標 Activity 在 Manifest 中被設置為 android:launchMode="singleTask" 且已經存在於任務棧中時,直接啟動該 Activity 將不會觸發 onCreate() 方法,導致無法在 onCreate() 中通過 getIntent() 獲取最新傳遞的數據。
針對 singleTask 模式下 Activity 被複用的情況,Android 提供了 onNewIntent(Intent intent) 回調方法。當一個已經存在的 singleTask Activity 再次被啟動時,系統會調用該方法並將新的 Intent 傳遞進來。我們只需在該方法中提取數據即可。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// 獲取從 Activity A 傳遞過來的數據
String dataFromA = intent.getStringExtra("fromA");
// 在此處理獲取到的數據,例如更新 UI
if (dataFromA != null) {
// 更新 TextView 或進行其他業務邏輯
textView.setText(dataFromA);
}
}
onNewIntent()。onCreate() 中獲取 Intent 數據,必須同時在 onNewIntent() 中處理。getIntent() 獲取最新 Intent,可在 onNewIntent() 中調用 setIntent(intent) 更新內部引用。此方案適用於所有啟動模式為 singleTask 或 singleInstance,且需要接收多次啟動請求並處理不同數據的 Activity,例如應用主頁、訂單詳情頁、聊天會話頁等。