2 Activity啟動模式

2021-08-14 13:19:03 字數 1900 閱讀 5234

activity 啟動模式,熟知的就是 standard、singletop、singletask、singleinstance

注意點:

只有 singletask 啟動模式的activity 單獨設定任務棧名稱有意義。

任務棧名稱不可與包名一致,設定方式為在清單檔案。

android:taskaffinity="com.yanlong.task1"

1、standard 啟動模式,誰載入我,我進入誰的任務棧;

intentintent = 

newintent()

;intent.setclass(

mainactivity.

this,

secondactivity.

class)

;intent.addflags(

intent.

flag_activity_new_task);

startactivity(intent)

;

3、singletop:如果啟動的新ac已經屬於棧頂,那麼會呼叫 onnewintent。

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...