您好,登錄后才能下訂單哦!
什么是Task
先講一下android中的Task。可以把它看做是一個棧,用在存放Activity的棧,只有兩個動作,進棧和出棧,遵循先進后出的原則。
一、Activity的啟動模式有四種:
1. Standard
2. singleTop
3. singleTask
4. singleInstance
問:哪里設置Activity的啟動模式呢?
答:在Menifest.xml中設置Activity的屬性android:launchMode="singleTop"
問:這些啟動模式的設置決定了什么?或者作用是什么?
答:決定了他們在Task中的存在方式
二、四種模式的解釋
1. standard
默認的模式,每次都會新建,每個Task都可以有,且每個Task都可以有多個實例(每個Task都可以有,且可以有多個)
2. singleTop
當前實例如果在棧頂,就不新建實例,調用其OnNewIntent。 如不在棧頂,則新建實例 (每個Task都可以有,且可以有多個,在棧頂時可復用)
3. singleTask
新建一個Task,如果已經有其他的Task并且包含該實例,那就直接調用那個Task的實例。(只有一個Task中會有)
4. singleInstance
新建一個Task,且在該Task中只有它的唯一一個實例。 (只有一個Task會有,且該Task中只有它)
三、演示
實例一、
如上圖,創建三個Activity,每個Activity中都有一個Button,單擊后會跳到下一個Activity。
默認是standard模式,這時候看一下Task中的情況
會看到在Task A中有兩個Activity A,所以standard是每次都在初始化一個新的Activity
實例二、
為了證明singleTop模式,我們將Activity之間的跳轉方式改變一下,如下圖
先用一個Activity證明吧,這是一個Activity,點擊按鈕后跳到他本身。例子本身沒有什么實際作用,只是為證明singleTop
如果是模式standard模式,大家想一下,棧的情況會是怎樣的?
Task棧中情況如下
但如果是singleTop中,不管你按多少次button,棧中的情況只有一種,singleTop會判斷當前這個Activity是不是在Task的頂部,如果是在頂部就不會去new,如果不是,就會new,
如果把實例一中的每個Activity的launchMode都設置成singleTop,那么Task中的情況回合是實例一棧的情況是一模一樣的。
實例三、
關于singTask,singleTask模式和后面的singleInstance模式都是只創建一個實例的。
如果Activity A設置了singleTask,那個么棧中只有Activity A的一個實例,但是可以包含Actvity B ,Activty C 的實例,這與singleInstance是有區別的,singleInstance是一個棧中只有這一個Activity 的實例,只有一個。
將實例一中的Activity A 設置為singleTask模式,如下圖
則棧中的關系如下
我們看到在4步的時候發生了變化,棧中就只有Activity A了,此時如果按Back鍵時,就退出了程序。
由Activity C到Activity A進行跳轉時,Task中到發生了什么?
因為Activity A的家在模式為singTask,會先判斷Task A中是否有Activity A 的實例,如果有,就不用實例化了,如果沒有就要實例化。結果在Task A中有Activity的實例,但是在棧底,這時候怎么辦呢,會先將Activity C彈出棧,然后在彈出 Activity B彈出棧。如下圖
實例四、
Activity A 的launchMode為singInstance,會創建一個新的Task,然后在Task中只有一個實例就是Activity A.
棧中情況如下
這種模式下,要注意Activity的回退情況,就是按Back鍵的時候Activity的回退情況。此時如果按Back鍵,先返回到Activity A,然后是C ,B。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。