Task 和The Back Stack

一個task就是一個應用程序在運行時出現所有的activity(包括來自其他應用的activity)的收集器。task使用back stack來管理activities。

當用戶啓動一個應用時,這個應用的task就會進入foreground,如果這個應用沒有對應的task(即這個應用最近沒有被打開過),那麼系統就會爲這個應用新建一個task,且這個應用的main activity作爲stack中的根activity。

  • stack內部

下圖簡要描述了新的activity是如何被添加到back stack中和stack中的activity是如何被彈出stack中的。

這裏寫圖片描述

activity A啓動activity B,則activity A停止,但是系統保存其狀態,如果用戶在activity B中返回則activity B被彈出且銷燬,activity A以被保存的狀態恢復。當所有的activity被從stack中移除,那麼task for the application就不再存在。

  • stack之間

當用戶啓動另一個新的task或者是按Home button返回到Home screen時,當前的task就會進入到background。
舉例來說:當前應用程序的task(Task A)在foreground,當用戶返回Home screen 啓動另外一個應用時,該應用的task(Task B,若沒有就新建)就進入foreground。在Home screen出現時,Task A就已經進入background等待被再次喚醒,其stack中的activity都進入stop狀態。當用戶再次啓動啓動了Task A的應用時,Task A就再次回到foreground且其stack中的所有的activity是完整的,最頂部的activity再次獲得用戶焦點。這時,用戶就可以在Task A和Task B之間來回轉換。

注意:在background中可以同時存在多個task,但是如果用戶在background中同時運行過多的task時,系統就可能開始銷燬background中的activity來恢復內存,這將會導致activity的狀態會消失。

  • 保存activity狀態

    當一個activity停止時,系統會默認地保存它的狀態,但是你應該主動地調用回調方法來保存其狀態,以防該activity被銷燬還得重建。
    有的時候系統爲了恢復內存,會銷燬處於stop狀態的activity,這樣關於這個activity的狀態信息就會丟失,爲了避免這樣的情況發生,你應該在你的activity中實現 onSaveInstanceState()。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章