Acitivity在singleTask載入模式下的資料傳遞處理

lvxiangan發表於2018-08-21

在Android開發中,我們通常要在不同頁面之間傳遞資料,比如要從ActivityA啟動ActivityB並傳遞資料到ActivityB裡面,這個很簡單,用Intetn加Bundle就可以了。不過有時候如果您需要讓後臺執行的Activity回到前臺並傳遞資料就有些問題。

    通常,我們通過Intent啟到Activity的時候,就算存在一個相同的正在執行的Activity,系統都會建立一個新的Activity例項並顯示出來。此時我們最好就是讓Activity不啟動多次,通過在AndroidManifest.xml配置activity的載入方式(launchMode)以實現單任務模式(android:launchmode="singleTask")。singleTask的時候,啟到一個ActivityA,如果系統已經存在ActivityA例項,系統就會直接啟動ActivityA。然而這個時候,系統不會再呼叫通常情況下我們處理請求資料的onCreate方法,而是呼叫onNewIntent方法,如下所示:


protected void onNewIntent(Intent intent) {
  super.onNewIntent(intent);
  setIntent(intent);

  //處理資料,data=getIntent().get.....
}

不過有的時候,系統可能會隨時殺掉執行在後臺的 Activity ,那麼系統啟動ActivityA時還會呼叫 onCreate 方法,而不呼叫 onNewIntent 方法。這個時候又怎麼處理呢?通常就是在 onCreate 和 onNewIntent 方法中呼叫同一個處理資料的方法,這樣就可以解決問題。

注意:

protected void onNewIntent(Intent intent) {
  super.onNewIntent(intent);
  setIntent(intent);

  //處理資料,data=getIntent().get.....

}

在上面這個方法中,如果沒有呼叫setIntent(intent),則getIntent()獲取的資料將不是你所期望的。所以最好是先呼叫setIntent(intent),這樣再呼叫getIntent()獲取資料就沒問題了。

相關文章