activity 啟動模式,熟知的就是 standard、singletop、singletask、singleinstance
注意點:
只有 singletask 啟動模式的activity 單獨設定任務棧名稱有意義。
任務棧名稱不可與包名一致,設定方式為在清單檔案。
android:taskaffinity="com.yanlong.task1"
1、standard 啟動模式,誰載入我,我進入誰的任務棧;
intentintent =3、singletop:如果啟動的新ac已經屬於棧頂,那麼會呼叫 onnewintent。newintent()
;intent.setclass(
mainactivity.
this,
secondactivity.
class)
;intent.addflags(
intent.
flag_activity_new_task);
startactivity(intent)
;
4、singletask:如果存在,多次啟動,呼叫onnewintent。
重要:singletask 啟動方式 --- 先檢查是否有所需 任務棧,再檢查是否有所需例項。
任務棧名稱 自定義棧名 如 com.yanlong.task
a:mainactivity 任務棧名稱 預設包名,預設開啟 standard
b:secondactivity 任務棧名稱 預設包名,開啟方式 standard
c:threadactivity 任務棧名稱 自定義棧名,開啟方式 singletask
d:fouractivity 任務棧名稱 自定義棧名,開啟方式 singletask
啟動流程 a->b->c->d->b
a啟動b,由於b是 standard,那麼b直接進入 預設包名棧
b啟動c,由於c是 singletask,那麼c先查詢 自定義棧名,沒有找到,那麼先建立 自定義棧名,然後建立c例項,壓入自定義棧名任務棧
c啟動d,由於自定義棧名已經存在,然後查詢該棧名內是否有 d例項,沒有找到,那麼建立d例項,壓入自定義棧名任務棧
d啟動b,由於b是 standard,那麼b直接進入 自定義棧名任務棧
所以最後結果
預設棧內:a b
自定義棧內:c d b
taskaffinity屬性主要和singletask啟動模式或者 allowtaskreparenting屬性配對使用,在其他情況下沒有意義。另外,任務棧分為前台任務棧和後台任務棧,後台任務棧中的activity位於暫停狀態,使用者可以通過 切換將後台任務棧再次調到前台。
當taskaffinity和allowtaskreparenting結合的時候,會產生特殊效果
應用 m,應用 n
n中 activity n-a,屬性 allowtaskreparenting 為 true
m 啟動了 n-a。然後按home回到桌面,單擊n的桌面圖示,顯示介面不是 n的mainactivity 而是 n-a
解釋:m 啟動了 n-a,這時候 n-a 只能執行在 m的任務棧中,但是n-a屬於n應用,正常情況下,他的taskaffinity值肯定和m不同,因為包名不同。所以當n啟動時,n會建立自己的任務棧,這時候系統發現 n-a原本想要的任務棧被建立了,所以就把n-a從m的任務棧 轉移了過來。
activity 啟動模式
在android的中activity 有4種啟動方式 standard singletop singletask singleinstance 下面就分輕重點講講這些啟動方式。1 standard啟動方式 這種方式也是系統預設的。說的簡單點,我們在使用startactivity 方法的時候,系統就會...
activity啟動模式
1 對於使用standard 模式的活動,系統不會在乎這個活動是否已經在返回棧中存在,每次啟動都會建立該活動的乙個新的例項。例如a啟動a,a再接著啟動a,a繼續啟動a,然後再分別出棧,如圖所示 2 當活動的啟動模式指定為 singletop,在啟動活動時如果發現返回棧的棧頂已經是該活動,則認為可以直...
Activity啟動模式
兩種方式可以定義activity啟動模式 manifest intent intent定義的啟動模式優先於manifest 不管activity執行在乙個新的任務還是與啟動它的activity同樣的任務,返回鍵總是把使用者帶到之前的activity。然而,如果啟動乙個singletask的activ...