[英]How to launch activity the same way launchers do?
我有一個Activity
A ,在Android清單中被聲明為singleTop
和android.intent.action.MAIN
。 我從啟動器啟動它,然后通過Intent
啟動另一個活動B ,然后按Home按鈕。 現在,我有一個活動堆棧“ A , B ”在后台等待的任務。 如果再次從啟動器啟動活動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_TASK
和FLAG_ACTIVITY_REORDER_TO_FRONT
(可選)的任何標志。
我自己沒有嘗試過,但是我堅信它會起作用。 試試看,讓我知道是否可以。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.