天天看點

android之tasks和back stacks預設行為管理Task

Android 是一個多任務的系統,同時可以運作多個應用程式。但是和大部門的作業系統一樣,同時隻有一個程式可以獲得焦點,并和使用者互動。即同時隻能有一個程式在前台運作,其他應用在背景。使用者可以在不同的應用間切換,切換的時候,android系統會自動恢複背景的應用到前台。Android的這個機制是用Tasks 來組織的。

Android和 IOS還有一點不同的是,android有一個實體上的傳回鍵,使用者可以通過傳回鍵傳回到上一個界面(activity)。這個機制是有back Stack(傳回棧)實作的。

預設行為

一個應用通常由多個activity組成,每個activity都是某個不同的功能。一個activity可以啟動另外一個activity,而不管這個activity是否屬于這個應用程式。如一個應用程式,可以啟動發短信程式的activity。但是一般情況下不論如何,他們都處于一個task中。

一個task是一個activity的集合,使用者和它進行互動而完成某項工作。這些activity以棧的方式組織,它們在棧中的位置和他們打開的順序有關,後打開的在棧頂。棧中儲存了每個activity的狀态。當按傳回鍵的時候,棧頂的activity出棧并銷毀。如下圖:

android之tasks和back stacks預設行為管理Task

Tasks是一個有機的整體。如從home 進入一個應用A,依次啟動兩個activity。然後按home鍵。啟動應用B,也啟動兩個activity。如下圖,此時應用A的task作為一個整體在背景,而B在前台:

android之tasks和back stacks預設行為管理Task

Activity和tasks的預設行為行為可以總結如下:

1.                   當activityA啟動activity B,activityA就變為stop狀态,但系統儲存其狀态(如滾動位置和輸入到表單的文本)。如果使用者此時按下後退按鈕,那麼A執行onResume變為活動狀态,而B則銷毀。

2.                   當使用者通過按Home按鈕,目前活動停止,且其task進入到背景。系統會儲存在其task活動狀态。如果使用者通過圖示 重新啟動此Task,那麼此task回到前台、恢複棧頂的activity。

3.                    如果使用者按下傳回按鈕,目前activity從棧中彈出并摧毀了。棧中的以前的activity恢複。當一個activity被銷毀,系統不保持activity的狀态;

4.                   activity可以被執行個體化多次,甚至從其他應用的task。

管理Task

上面介紹了task的預設行為,當然可以被改變,也可以根據需要對task進行管理。

activity和task之間的聯系,以及task中的 activity的行為可以通過intent中的标記 以 及在manifest中的<activity>元素 的屬性 控制。其中,主要的Intent标記有,這裡做一個簡介:

FLAG_ACTIVITY_NEW_TASK:建立新的Task,如果背景已經存在此activity的task,則隻是調用其

onNewIntent()

.,把intent傳給它。

FLAG_ACTIVITY_SINGLE_TOP:如果待啟動的activity在目前task所在棧的棧頂,那麼隻是調用其

onNewIntent()

否則就建立activity

FLAG_ACTIVITY_CLEAR_TOP: 如果待啟動的activity已經在目前的task中的棧中,那麼就把其上面的activity都銷毀,并調用其

onNewIntent()

否則就建立activity

主要的<activity>屬性有:

launchMode 包括

standard對應預設行為;

singleTask 對應上面的FLAG_ACTIVITY_NEW_TASK;

singleTop 對應 FLAG_ACTIVITY_SINGLE_TOP;

singleInstance 和 singleTask類似,差別是 singleInstance所存在的task中隻能有其一個activity。

具體的詳細見:

http://blog.csdn.net/infsafe/article/details/5666964  Android的Activity和Tasks詳解。這篇文章的表格。