2010-04-22 21 views
3

所以我有一個運行一個asynchtask的MapActivity,偶爾會更新它在地圖上顯示的內容(通過字符串)。我最初在創建活動時從意圖傳入此字符串。然後,如果您單擊地圖上的其中一個可繪製對象,它將打開一個新的活動,然後可以使用不同的字符串設置創建一個新的mapview(相同的類)。我遇到的問題是我只想要一次運行mapview的一個實例。因此我在清單中設置了android:launchmode =「singletask」。這樣做的原因在於它將mapactivity帶到了前面,但是有什麼辦法可以發送一個新的intent bundle來爲它需要的字符串獲取新的設置嗎?我嘗試從包中重新獲取額外內容,但它似乎保留舊包,而不是傳遞給它的新意向。我不確定我想要做startActivityForResult,因爲第二個活動可能會或可能不想更新原始活動。將捆綁傳遞給活動設置爲singletask

我希望這是有道理的。如有必要,我可以發佈代碼,但我認爲這應該解釋我的情況。

回答

9

當你的活動被標記爲singleTask已經在運行,並且新的Intent被髮送給它時,onNewIntent將被調用來告訴你它。

默認情況下,這個新的意圖確實是而不是在該調用返回後以任何方式得到存儲,並且默認實現什麼也不做。如果您覆蓋onNewIntent,則可以直接從那裏處理附加到新意圖的附加信息和/或使用setIntent將新意圖附加到您的活動,以便將來的getIntent().get*Extra(...)調用將返回更新的數據。

請注意,有一種特殊情況:如果您的singleTask活動在其任務中啓動了另一項活動(即,沒有NEW_TASK標誌的可嵌入活動),那麼當您的活動收到意圖時該活動就會到達前臺,意圖本身將會被悄然放棄。小心一點。有關更多信息,請參見the Dev Guide