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

Android 開發:解決 singleTask 模式下 Activity 數據傳遞失效的問題

     編輯:程式設計綜合問答

問題背景

在 Android 開發中,我們經常需要在 Activity 之間傳遞數據。通常情況下,使用 Intent.putExtra() 搭配 startActivity() 即可輕鬆實現。然而,當目標 Activity 在 Manifest 中被設置為 android:launchMode="singleTask" 且已經存在於任務棧中時,直接啟動該 Activity 將不會觸發 onCreate() 方法,導致無法在 onCreate() 中通過 getIntent() 獲取最新傳遞的數據。

核心解決方案:重寫 onNewIntent()

針對 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);
    }
}

關鍵點總結

  • singleTask 特性:確保任務棧中只存在一個該 Activity 實例,再次啟動時會複用現有實例並調用 onNewIntent()。
  • 數據獲取時機:不要只在 onCreate() 中獲取 Intent 數據,必須同時在 onNewIntent() 中處理。
  • 調用 super.onNewIntent():建議調用父類方法以保證系統默認行為正常執行。
  • 更新 Intent 引用:若後續仍需使用 getIntent() 獲取最新 Intent,可在 onNewIntent() 中調用 setIntent(intent) 更新內部引用。

適用場景

此方案適用於所有啟動模式為 singleTask 或 singleInstance,且需要接收多次啟動請求並處理不同數據的 Activity,例如應用主頁、訂單詳情頁、聊天會話頁等。

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