一、總結性知識點:
? ??1、Android應用運行時會創建任務Task,用于存放主窗口
? ??2、每一個任務包含一個堆棧數據結構,用于保存當前應用已創建的窗口對象,這個堆棧即回退棧BackStack
? ??3、?位于回退棧頂的窗口會處于焦點狀態
? ??4、?窗口的顯示與關閉即是入棧與出棧的過程
二、詳細描述
? ??(一)、任務Task:
? ??1、概念:
? ??? ??一個任務(task)就是在執行某項工作時與用戶進行交互的Activity的集合。這些Activity按照被打開的順序依次被安排在一個堆棧中(回退棧)。
? ??2、主屏頁面:
? ??? ??設備的主屏是大多數任務的啟動位置,當用戶觸摸一個應用程序啟動器圖標(或者app快捷圖標),應用程序的任務就會在前臺顯示。如果相關應用程序的任務不存在,那么就會有一個新的任務被創建,并且應用程序打開的“主”Activity會作為任務中的根Activity。
? ??(二)、回退棧:
? ??1、概念:
? ??? ??在當前的Activity啟動了另一個Activity時,這個新的Activity被放到了堆棧的頂部,并且帶有焦點。
? ??? ??前一個Activity并沒有消失,而是保存在回退棧中,此時它處于停止狀態。
? ??? ??當用戶按下回退按鈕時,當前的Activity會被從回退棧的頂部彈出(這個Activity被銷毀),而前一個Activity被恢復。堆棧中的Activity不會被重新排列。因此,回退棧的操作跟后進先出的對象結構是一樣的。
? ??? ??在用戶按下回退按鈕時,當前Activity被銷毀,并且前一個Activity被恢復。如果用戶繼續按回退按鈕,那么回退棧中的每個Activity會被依次彈出,前一個Activity會被顯示,直到用戶返回主屏(或者返回到任務開始時運行的那個Activity)。當所有的Activity從回退棧中被刪除時,這個任務就不再存在了。
? ??(三)、Activity和Task的默認行為的總結:
? ??1、當Activity?A啟動Activity?B時,ActivityA被終止,但是系統保留了它的狀態(如滾動條的位置和錄入表單的文本)。如果用戶在Activity?B中按回退按鈕,Activity?A會使用被保存的狀態來進行恢復。
? ??2、當用戶通過按主頁(Home)按鈕離開一個任務時,當前的Activity會被終止,并且被放入后臺。系統會保留任務中每個Activity的狀態。如果用戶隨后通過選擇啟動圖標來恢復這個任務,那么任務會來到前臺,并且恢復了堆棧頂部的Activity。
? ??3、如果用戶按下回退按鈕,當前的Activity會從堆棧中被彈出并且被銷毀。堆棧中的前一個Activity會被恢復。Activity被銷毀時,系統不會保留Activity的狀態。
? ??4、Activity能夠被實例化多次,甚至來自其他任務。?三、壓棧和彈棧 (一個任務中多窗口顯示與關閉)