網上關於launch mode的資料有不少,儘可參考. spa
本文旨在進行稍微深刻一點的說明. 設計
默認加載方式.每當須要一個Activity instance的時候系統都會建立一個新的實例給咱們,而且將它置於棧頂.這種方式不關心原有的棧結構. 資源
系統首先會尋找棧中的instance,若是已有所需實例且位於棧頂,則直接使用;不然就從新建立新的實例. 源碼
系統首先會尋找棧中的instance,若棧中已有所需實例,則移出該實例之上的全部實例並使用. it
當Activity的launch mode 被設置爲single instance時,該Activity 實例將被建立於一個新的棧中,且該棧只存在一個實例.若有須要則直接從該棧中取來使用. 用戶體驗
那麼,上文中所謂的"棧"具體指的什麼呢? 程序
一個棧,表明了一個"任務"(task),這個棧中可能存放有來自不一樣應用程序的多個Activity,在用戶的角度來講,就像是多個頁面連貫展現同樣. 總結
咱們使用Intent啓動一個新的Activity時,能夠經過intent攜帶的參數設置任務與加載模式,好比設置intent的flag爲Intent.FLAG_ACTIVITY_NEW_TASK.新的Activity則會被建立於一個新的任務棧. vi
更多的flag可查閱Intent源碼. 工程師
Android的返回鍵一直是一個比較受爭議的設計,由於用戶根本不知道當他們點擊了返回鍵後會發生什麼.之因此會出現這種爭議,就是由於不一樣的應用在使用任務棧的時候設計不一樣,或者工程師沒有使用任務棧的意識,以致於有的應用在幾屏跳轉以後,必需要用戶狂按返回鍵才能退出,用戶體驗很是很差.
這就是任務堆棧的做用之一.若是應用中包含的Activity不少,使用flag在Activity互相跳轉時保持井井有條,提升用戶體驗.
其次,若是一個應用中存在大量無用的Activity,會大量消耗系統資源,嚴重可能形成應用崩潰.因此棧結構能夠更好地管理Activity,及時銷燬無用的task釋放資源.