Android的每一個Activity都運行在堆棧中,一個Task棧能夠有多個Activity,同一個Activity也能夠在不一樣的Task棧中。java
棧頂的Activity是用戶當前正在進行交互的Activity。用戶不斷返回的時候,棧頂的Activity會不斷彈出直到用戶回到桌面或者其餘啓動這個Activity的組件,那麼這個Task就會銷燬了。android
Task是分前臺和後臺的。通常當用戶啓動一個新的Task或者按Home鍵回到桌面時,Task就會被轉入後臺。若是用戶長時間離開某個Task,這個Task只保留root Activity,其餘的都會被銷燬。code
Activity的LaunchMode屬性能夠指定Activity和Task之間的關係。it
android:launchMode="standard" android:launchMode="singleTop" android:launchMode="singleTask" android:launchMode="singleInstance"
系統默認是standard的,即同一個Activity能夠被實例化屢次。
singleTop是指若是Task棧如今的順序是A,B,C,D。那麼若是如今傳來一個intent是啓動D的,那麼D是會調用onNewIntent來接受傳來的intent,而不會從新啓動D。因此Task棧的順序仍是A,B,C,D。class
singleTask是指Activity只能實例化一次而且爲它建立一個新的Task,若是Activity已存在其餘Task中就執行Activity的onNewIntent方法。當前Activity做爲Task的root Activity,從root Activity啓動的Activity會push進同一個Task中。後臺
singleInstance是指Activity只能實例化一次而且獨佔一個Task。其餘與singleTask同樣。方法
除了能夠在androidmanifest文件中定義Activity和Task的關係以外,在啓動Activity時傳入的Intent中也能夠設置標識符來修改Activity的啓動模式文件
FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_SINGLE_TOP FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_NEW_TASK和singleTask對應時間
FLAG_ACTIVITY_SINGLE_TOP和singleTop對應vi
FLAG_ACTIVITY_CLEAR_TOP的話是指若是啓動的Activity已存在,則將該Activity之上的Activity所有銷燬掉。即棧A,B,C,D如今有傳來intent啓動Activity B,則C和D都將被finish掉,而後啓動Activity B。