簡體   English   中英

如何以啟動器相同的方式啟動活動?

[英]How to launch activity the same way launchers do?

我有一個Activity A ,在Android清單中被聲明為singleTopandroid.intent.action.MAIN 我從啟動器啟動它,然后通過Intent啟動另一個活動B ,然后按Home按鈕。 現在,我有一個活動堆棧“ AB ”在后台等待的任務。 如果再次從啟動器啟動活動A ,我將恢復已運行的實例並還原堆棧(活動B在前台運行)。

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

首先,請確保當您長時間不使用該任務時,系統不會殺死您的活動B。

如果用戶長時間離開任務,系統將清除除根活動以外的所有活動的任務。 當用戶再次返回任務時,僅還原根活動。 系統的行為方式是這樣的,因為經過較長時間后,用戶可能已經放棄了以前的工作,而返回到任務以開始新的工作。

您可以使用一些活動屬性來修改此行為:

alwaysRetainTaskState :如果在任務的根活動中將此屬性設置為“ true”,則不會發生上述默認行為。 即使經過很長時間,該任務也會將所有活動保留在其堆棧中。 因此,您需要做的是將清單文件中A的<activity>標記下的值設置為true。

其次,您不需要singleTop 從Android文檔中查看此 我想這就是你想要的。 如果啟動指定單singleTask啟動模式的活動,則如果該活動的實例存在於后台任務中,則整個任務都將置於前台。 至此,后退堆棧現在在堆棧的頂部包括來自提出的任務的所有活動。

因此,您還需要在A和B的標簽下添加singleTask ,而不是singleTop 然后,您需要從Notification中啟動活動A,但沒有FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_REORDER_TO_FRONT (可選)的任何標志。

我自己沒有嘗試過,但是我堅信它會起作用。 試試看,讓我知道是否可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM