Activity啟動模式

2021-07-15 02:29:29 字數 3212 閱讀 1914

androidmainfest啟動模式

1.standard

預設的啟動模式,如果不指定activity的啟動模式,則使用這種方式啟動activity.這種啟動模式每次都會建立新的例項,每次建立activity後,都會建立新的mainactivity覆蓋在原activity上。

2.singletop

如果指定啟動activity為singletop模式,那麼在啟動時,系統會先判斷當前棧頂的activity是不是要啟動的activity,如果是則直接引用,如果不是則建立新的activity例項。 這種啟動模式雖然不會建立新的例項,但是系統仍然會在activity啟動時呼叫onnewintent()方法。

注:singletop模式在每次啟動時,只是判斷要啟動的activity是否在棧頂,如果不在,也是會重複建立新的activity。

what onnewintent() ?

官方解釋:

中文解釋:當一組在它們的package設定了啟動模式為「singletop」的活動會呼叫它,或者當乙個客戶端使用flag_activity_single_top這個flag來呼叫startactivity(intent)時。在這兩種情況下,當活動將在活動堆疊的頂部,而不是乙個新例項的活動開始,onnewintent()將在現有例項用於啟動的目的的時候呼叫。

呼叫時機

1.如果intentactivity處於任務棧的頂端,也就是說之前開啟過的activity,現在處於

onpause

onstop 狀態的話

其他應用再傳送intent的話,執行順序為:

onnewintent

onrestart

onstart

onresume

2.launchmode為singletask的時候,通過intent啟到乙個activity,如果系統已經存在乙個例項,系統就會將請求傳送到這個例項上,但這個時候,系統就不會再呼叫通常情況下我們處理請求資料的oncreate方法,而是呼叫onnewintent方法,如下所示:

3.系統可能會隨時殺掉後台執行的activity,如果這一切發生,那麼系統就會呼叫oncreate方法,而不呼叫onnewintent方法,乙個好的解決方法就是在oncreate和onnewintent方法中呼叫同乙個處理資料的方法,如下所示:

當活動的啟動模式指定為singletask,每次啟動該活動時系統首先會在返回棧中檢查是否存在該活動的例項,如果發現已經存在則直接使用該例項,並且把在這個活動之上的所有活動統統出棧,如果沒有就會建立乙個新的活動例項。 圖示:

不同於以上三種啟動模式,指定為singleinstance模式的活動會啟用乙個新的返回棧來管理這個活動。在這種模式下會有乙個單獨的返回棧來管理這個活動,不管是哪個應用程式來訪問這個活動,都共用乙個返回棧,解決了活動共享的問題。

圖示:

intent flag啟動模式

另一種設定activity啟動模式的方式。

. intent.flag_activity_new_task

使用乙個新的task來啟動乙個activity,但啟動的每個activity都將在乙個新的task中。該flag通常使用在從serive中啟動activity的場景,由於在serive中並不存在activity棧,所以使用該flag來建立乙個新的activity棧,並建立新的activity例項。

或者從broadcast的onreceive()方法中啟動乙個新活動,同理。

.flag_activity_single_top

使用singletop模式來啟動乙個activity,與指定android:launchmode=」singletop」效果相同。

.flag_activity_clear_top

使用singletask模式來啟動乙個activity,與指定android:launchmode=」singletask」效果相同.

.flag_activity_no_history

使用這種模式啟動activity,當該activity啟動其他activity後,該activity就消失了,不會保留在activity棧中,例如 a-b,b以這種模式啟動c,c再啟動d,則當前activity棧為abd。

清空任務棧

系統提供了清空任務棧的方法來讓我們將乙個task全部清除。通常情況下,可以在androidmainifest檔案中的標籤中使用以下幾種屬性來清理任務棧。

1.cleartaskonlaunch

cleartaskonlaunch就是在每次返回該activity時,都將該activity之上的所有activity都清除。通過這個屬性,可以讓這個task每次在初始化的時候,都只有乙個activity.

2.finishontasklaunch

通過這個屬性,當離開這個activity所處的task,那麼使用者再返回時,該activity就會被finish()掉。

3.alwaysretaintaskstate

如果將activity的這個屬性設定為true,那麼該activity所在的task將不接受任何清理命令,一直保持當前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...