activty在哪个栈里面_第二篇Activity:2、任务和返回堆栈(Tasks and Back Stack)之基本介绍...
參考:http://developer.android.com/guide/components/tasks-and-back-stack.html
在Android中,一個應用程序里面,通常包含了多個相互結合的Activity。每個Activity通常被設計為可以為用戶執行某個特定的動作,Activity與Activity之間可以通過Intent相互的跳轉。甚至,可以通過Intent的action來啟動另外一個應用程序的Activity,這個過程給用戶的感覺就像這個Activity就是你的應用程序里面一樣。Android把Activity的這種表現稱之為“無縫連接”。
在用戶的角度上看,它對某一個應用程序的操作,就是執行一個特定的task(任務),來完成某一個特定的操作。但是實際上在Android應用中,這可能是一個task或者是多個task之間相互結合。這就是Android的“多任務”機制。我們知道,一個應用程序表現給用戶的就是一個個的Activity,所以“多任務”機制就是Android系統對Activity的管理。
在Android中,通過使用“back stack(返回堆棧)”來實現對Activity的管理,每一個啟動的Activity都會存儲在“back stack”中,遵循著棧的基本原則:先進后出。無縫連接只是Activity管理的一部分表現而已。下面先看看Task和back stack的基本行為。
一、Task和back stack的基本行為
1、單個Task中的多個Activity
Home界面是啟動Task最多的地方。當用戶點擊一個應用程序圖標(或者是快捷方式),這個應用程序的Task就會被調到前臺(如果這個應用程序的Task不存在,那么就會創建一個新的任務,而這個應用程序的“main”Activity就會作為back stack的root Activity)。
當這個Activity在去啟動其他的Activity,這個新的Activity就會被壓入到“back stack”的棧頂并且獲得焦點,之前的那個Activity仍然保留在棧中,但是卻會停止(Activity的生命周期)。當用戶按下Back(返回)鍵,當前的Activity就會彈出棧頂(被銷毀),而之前的那個Activity就會被恢復。
如下圖:
如果用戶繼續按下返回鍵,那么棧中的Activity會按照順序一個個彈出,知道退出到Home界面(或者退回到啟動這個Task的Activity(多Task))。此時,這個棧中的所有Activity全部被移除,這個Task就不存在了。
2、“back stack”永遠遵循先進后出的原則
在“back stack”返回堆棧中的Activity永遠都會遵循“?!边@種數據結構的基本原則——先進后出。永遠都不會被重新的排序,只會不斷的彈出或者壓入。
“back stack”中Activity的存儲和Activity的啟動模式密切相關,這點在后面會學到,這里先來用這個知識舉個例子:在一個棧中有3個Activity:Activity1,Activity2,Activity3。并且Activity1的啟動模式為“singleTask”。如下圖:
3、一個Task就是內聚單元
Android是一個“多任務”的系統,同一時刻會有多個Task的存在。一個Task是一個內聚單元,當用戶開始一個新的Task或者通過Home按鈕返回到Home界面的時候,該Task可以移動到后臺(background)。當一個Task存在于后臺的時候,所有在這個Task中的Activity都處于Stopped狀態。但是這個Task的back stack仍然完好無損的保存著——它僅僅是被別的Task搶占了焦點。如下圖:
當如上如圖的情況下,用戶仍然可以在Home界面重新選擇TaskA的應用程序,讓TaskA獲取焦點,并且TaskA的棧頂的Activity Y會恢復,就像用戶之前離開它的時候一樣。
4、一個Activity可以被實例化多次
因為在“back stack”中的Activity永遠都不會重新排序,如果你的應用程序允許用戶在不止一個Activity去啟動另外一個指定的Activity,那么系統就會去創建一個該Activity新的實例并把它壓入到棧頂(而不是把棧中之前的那個實例移動到棧頂)。因此,應用程序的Activity可能會被實例化多次(甚至是在不同的Task中),如下圖:
然而,如果你不想一個Activity被實例化多次,我們可以去修改這種行為。這個將在后面的講到。
二、Activity、Task、Process的關系
用一張簡單的圖表示如下:
總結
以上是生活随笔為你收集整理的activty在哪个栈里面_第二篇Activity:2、任务和返回堆栈(Tasks and Back Stack)之基本介绍...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python逻辑题_这道逻辑题 用 Py
- 下一篇: java动态添加属性_java – 动态