Activity的啟動模式

2021-07-22 04:19:31 字數 2499 閱讀 1714

在android中啟動activity在內部也是比較複雜的,並且這些activity也是需要管理的。task就是對activity管理的。把開啟,或者關閉的activity存入到任務棧中,從而對這些activity進行管理。

任務棧:任務棧是用來放置activity例項的容器,以棧的形式盛放,也就是所謂的先進後出,壓棧和彈棧操作。

standard。系統在啟動 activity 的 task 中建立乙個新的 activity 例項,並把 intent 傳送路徑指向它。該 activity 可以被例項化多次,各個例項可以屬於不同的 task,乙個 task 中也可以存在多個例項。

如果 activity 已經存在乙個例項並位於當前 task 的棧頂,則系統會呼叫已有例項的onnewintent()方法把 intent 傳遞給已有例項,而不是建立乙個新的 activity 例項。activity 可以被例項化多次,各個例項可以屬於不同的 task,乙個 task 中可以存在多個例項(但僅當 back stack 頂的 activity 例項不是該 activity 的)。

比如,假定 task 的 back stack 中包含了根 activity a 和 activities b、c、d(順序是 a-b-c-d;d 在棧頂)。

這時過來乙個啟動 d 的 intent。如果 d 的啟動模式是預設的」standard」,則會啟動乙個新的例項,棧內容變為 a-b-c-d-d。

但是,如果 d 的啟動模式是」singletop」,則已有的 d 例項會通過onnewintent():接收這個 intent,因為該例項位於棧頂——棧中內容仍然維持 a-b-c-d 不變。當然,如果 intent 是要啟動 b 的,則 b 的乙個新例項還是會加入棧中,即使 b 的啟動模式是」singletop」也是如此。

注意: 乙個 activity 的新例項建立完畢後,使用者可以按回退鍵返回前乙個 activity。 但是當 activity 已有例項正在處理剛到達的 intent 時,使用者無法用回退鍵回到 onnewintent() 中 intent 到來之前的 activity 狀態。

使用場景:比如新聞列表介面的activity。

單一任務棧,activity只會在任務棧中存在乙個例項,如果任務棧中已經有了,就不會建立新的,呼叫onnewintent()方法,並且清空這個activity任務棧上面所有的activity。

系統將建立乙個新的 task,並把 activity 例項作為根放入其中。但是,如果 activity 已經在其它 task 中存在例項,則系統會通過呼叫其實例的onnewintent() 方法把 intent 傳給已有例項,而不是再建立乙個新例項。 此 activity 同一時刻只能存在乙個例項。

注意: 雖然 activity 啟動了乙個新的 task,但使用者仍然可以用回退鍵返回前乙個 activity。

使用場景:手機瀏覽器

單一例項,整個手機系統只存在乙個例項,並且這個例項執行在獨自的任務棧中,其他開啟這個activity,都是呼叫這個任務棧中的例項。

除了系統不會把其它 activity 放入當前例項所在的 task 之外,其它均與」singletask」相同。activity 總是它所在 task 的唯一成員;它所啟動的任何 activity 都會放入其它 task 中。

使用場景:打**,發簡訊介面。

如果使用者長時間離開某個 task,系統將會僅保留乙個根 activity,而把其它 activity 都清除掉。 當使用者返回 task 時,只有根 activity 會被恢復。 系統之所以這麼處理,是因為經過了很長時間後,使用者是要放棄之前進行的工作,返回 task 是為了開始新的工作。

你可以利用 activity 的某些屬性來改變這種方式:

alwaysretaintaskstate

如果 task 中根 activity 的此屬性設為 「true」 ,則預設的清理方式不會進行。即使過了很長時間,task 中所有的 activity 也都會保留在棧中。

cleartaskonlaunch

如果 task 中根 activity 的此屬性設為 「true」,則只要使用者離開並再次返回該 task,棧就會被清理至根 activity。也就是說,正好與alwaysretaintaskstate相反。使用者每次返回 task 時看到的都是初始狀態,即使只是離開一會兒。

finishontasklaunch

此屬性類似於cleartaskonlaunch,只是它只對乙個 activity 有效,不是整個 task。這能讓任何乙個 activity 消失,包括 根 activity。如果 activity 的此屬性設為 「true」,則只會保留 task 中當前 session 所涉及的內容。如果使用者離開後再返回 task,它就不存在了。

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