1. 程式人生 > >activity的四種啟動模式詳細分析

activity的四種啟動模式詳細分析

分析 四種 sig mage 導致 現在 .com 一個 頂部

1、android中通過任務隊列來管理activity

技術分享

采用棧的結構就是後進先出

手機裏面如果啟動多個應用就會啟動多個任務棧來管理對應的activity。

技術分享

主要解決下面的問題:對應的四種啟動模式:

1、界面1去啟動界面2,在界面2中再去啟動界面1,是新創建一個界面1的實例,還是使用後來棧中的已經存在的實例,這就和界面1的設置的模式有很大的關系。

標準的模式:每次去調用都會產生一個新的實例,比如當前activity,你在當前的activity中點擊按鈕再創建當前的activity,在任務棧就會存在當前的activity的兩個實例對象。

2、棧頂復用模式:如果已經有一個實例位於acitivity的頂部時候,就不會產生新的實例對象。如果不位於頂部,就會產生一個新的實例對象,舉個例子:如果現在棧內的情況是abcd,其中a位於棧頂,這個時候如果d的模式是頂部模式,這個時候如果再啟動d,不會在創建新的d的實例對象,棧內的情況還是abcd,如果d的模式設置成第一種標準的模式,那麽棧的情況就是abcdd

3 sigleTask對象模式:如果創建一個d activity,此時任務隊列中的情況是adbc,此時因為棧中存在了d對象,這個時候不會創建d對象的實例對象,因為d設置了sigleTask屬性,此時會將bc從棧中移除出去,導致所有的在d上面的acitivity都會被移除出去,棧中最後只有ad。

4 上面所述的三種模式的activity對象都屬於同一個task棧中,最後這種模式有點特殊。我們來舉一個例子

界面a去啟動界面b,其中界面a在任務s1隊列中,界面b設置成singleInstance模式,這個時候會啟動一個新的任務隊列s2,在s2中放置b的實例對象,在b界面中啟動界面c,整個時候不會創建一個新的任務棧,會把c放到隊列s1中,s1對應的情況是ac,s2對應的情況是b。啟動的順利是a啟動b,b中去啟動c

這個時候如果點擊返回按鍵,因為c現在處在可視界面,首先銷毀的是s1的隊列,先銷毀c,在銷毀a,s1隊列銷毀完成成在銷毀s2隊列在銷毀b,而不是先銷毀c,在銷毀b,在銷毀c。

activity的四種啟動模式詳細分析