Stack(棧):后進先出(LIFO),常用操作入棧(push),出棧(pop),處于最頂部的叫棧頂,最底部叫棧底。
Activity、Task、Back Stack: Task是Activity的集合,是一個概念,實際使用的Back Stack來存儲Activity,可以有多個Task,但是 同一時刻只有一個棧在最前面,其他的都在后臺!那棧是如何產生的呢? 答:當我們通過主屏幕,點擊圖標打開一個新的App,此時會創建一個新的Task!舉個例子: 我們通過點擊通信錄APP的圖標打開APP,這個時候會新建一個棧1,然后開始把新產生的Activity添加進來,可能我們在通訊錄的APP中打開了短信APP的頁面,但是此時不會新建一個棧,而是繼續添加到棧1中,這是 Android推崇一種用戶體驗方式,即不同應用程序之間的切換能使用戶感覺就像是同一個應用程序, 很連貫的用戶體驗,官方稱其為seamless (無縫銜接)! ——————這個時候假如我們點擊Home鍵,回到主屏幕,此時棧1進入后臺,我們可能有下述兩種操作: 1)點擊菜單鍵(正方形那個按鈕),點擊打開剛剛的程序,然后棧1又回到前臺了! 又或者我們點擊主屏幕上通信錄的圖標,打開APP,此時也不會創建新的棧,棧1回到前臺! 2)如果此時我們點擊另一個圖標打開一個新的APP,那么此時則會創建一個新的棧2,棧2就會到前臺, 而棧1繼續呆在后臺; 3) 后面也是這樣…以此類推!
< activity >中我們可以使用的屬性如下: - taskAffinity - launchMode - allowTaskReparenting - clearTaskOnLaunch - alwaysRetainTaskState - finishOnTaskLaunch taskAffinity:默認情況下,一個應用程序中的所有activity都有一個Affinity,這讓它們屬于同一個Task。 你可以理解為是否處于同一個Task的標志,然而,每個Activity可以通過 < activity>中的taskAffinity屬性設置單獨的Affinity。 不同應用程序中的Activity可以共享同一個Affinity,同一個應用程序中的不同Activity 也可以設置成不同的Affinity。 launchMode:standard,singleTop,singleTask,singleInstance (當用戶長時間離開Task(當前task被轉移到后臺)時,系統會清除task中棧底Activity外的所有Activity 。這樣,當用戶返回到Task時,只留下那個task最初始的Activity了。我們可以通過修改下面這些屬性來 改變這種行為!) alwaysRetainTaskState: 如果棧底Activity的這個屬性被設置為true,上述的情況就不會發生。 Task中的所有activity將被長時間保存。 clearTaskOnLaunch: 如果棧底activity的這個屬性被設置為true,一旦用戶離開Task, 則 Task棧中的Activity將被清空到只剩下棧底activity。這種情況剛好與 alwaysRetainTaskState相反。即使用戶只是短暫地離開,task也會返回到初始狀態 (只剩下棧底acitivty)。 finishOnTaskLaunch: 與clearTaskOnLaunch相似,但它只對單獨的activity操 作,而不是整個Task。它可以結束任何Activity,包括棧底的Activity。 當它設置為true時,當前的Activity只在當前會話期間作為Task的一部分存在, 當用戶退出Activity再返回時,它將不存在。

新聞熱點
疑難解答