2012-07-14 39 views
0

我有一個ActivityA在Android Manifest中聲明爲singleTopandroid.intent.action.MAIN。我從啓動器啓動它,然後啓動另一個活動BIntent然後按主頁按鈕。現在我有一個任務,活動堆棧「A,B」在後臺等待。如果我再次從啓動程序啓動活動A,則返回已運行的實例並恢復堆棧(在前臺運行的活動B)。如何以與發射器相同的方式發起活動?

這很好。我想從我自己的Notification發起活動A時達到同樣的效果。我已經嘗試了Intent標誌的不同組合,但我已經有一個活動A的新實例或相同的實例,但已清除堆棧(前臺沒有活動B)。

回答

0

首先,讓我們確保當您長時間不使用該任務時,系統不會終止您的活動B.

如果用戶長時間離開任務,系統將清除除根活動外的所有活動的任務。當用戶再次返回任務時,只有根活動恢復。系統的行爲方式是這樣的,因爲在很長一段時間之後,用戶可能已經放棄了之前正在做的事情,並且正在返回到開始新事物的任務。

有一些活動屬性,你可以用它來修改此行爲:

alwaysRetainTaskState:如果這個屬性被設置爲「真」在任務的根系活力,剛剛描述的默認行爲不會發生。即使經過很長時間,任務仍會保留其堆棧中的所有活動。因此,您需要做的是將您的清單文件中的<activity>標記設置爲true,以用於A.

其次,您將不需要0​​。從Android文檔檢查此figure。我想這是你想要的。如果您啓動一個指定啓動模式的活動,那麼如果該活動的一個實例存在於後臺任務中,則該整個任務將被帶到前臺。此時,後臺堆棧現在包含來自任務的所有活動,位於堆棧頂部。

所以你還需要在A和B的標籤下添加singleTask,而不是singleTop。然後,您需要從通知中啓動活動A,但沒有任何標誌,但是FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_REORDER_TO_FRONT(可選)。

我自己並沒有嘗試過這個,但我堅信它會起作用。嘗試一下,如果沒有,請告訴我。

相關問題