日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

activty在哪个栈里面_第二篇Activity:2、任务和返回堆栈(Tasks and Back Stack)之基本介绍...

發(fā)布時(shí)間:2024/9/19 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 activty在哪个栈里面_第二篇Activity:2、任务和返回堆栈(Tasks and Back Stack)之基本介绍... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

參考:http://developer.android.com/guide/components/tasks-and-back-stack.html

在Android中,一個(gè)應(yīng)用程序里面,通常包含了多個(gè)相互結(jié)合的Activity。每個(gè)Activity通常被設(shè)計(jì)為可以為用戶(hù)執(zhí)行某個(gè)特定的動(dòng)作,Activity與Activity之間可以通過(guò)Intent相互的跳轉(zhuǎn)。甚至,可以通過(guò)Intent的action來(lái)啟動(dòng)另外一個(gè)應(yīng)用程序的Activity,這個(gè)過(guò)程給用戶(hù)的感覺(jué)就像這個(gè)Activity就是你的應(yīng)用程序里面一樣。Android把Activity的這種表現(xiàn)稱(chēng)之為“無(wú)縫連接”。

在用戶(hù)的角度上看,它對(duì)某一個(gè)應(yīng)用程序的操作,就是執(zhí)行一個(gè)特定的task(任務(wù)),來(lái)完成某一個(gè)特定的操作。但是實(shí)際上在Android應(yīng)用中,這可能是一個(gè)task或者是多個(gè)task之間相互結(jié)合。這就是Android的“多任務(wù)”機(jī)制。我們知道,一個(gè)應(yīng)用程序表現(xiàn)給用戶(hù)的就是一個(gè)個(gè)的Activity,所以“多任務(wù)”機(jī)制就是Android系統(tǒng)對(duì)Activity的管理。

在Android中,通過(guò)使用“back stack(返回堆棧)”來(lái)實(shí)現(xiàn)對(duì)Activity的管理,每一個(gè)啟動(dòng)的Activity都會(huì)存儲(chǔ)在“back stack”中,遵循著棧的基本原則:先進(jìn)后出。無(wú)縫連接只是Activity管理的一部分表現(xiàn)而已。下面先看看Task和back stack的基本行為。

一、Task和back stack的基本行為

1、單個(gè)Task中的多個(gè)Activity

Home界面是啟動(dòng)Task最多的地方。當(dāng)用戶(hù)點(diǎn)擊一個(gè)應(yīng)用程序圖標(biāo)(或者是快捷方式),這個(gè)應(yīng)用程序的Task就會(huì)被調(diào)到前臺(tái)(如果這個(gè)應(yīng)用程序的Task不存在,那么就會(huì)創(chuàng)建一個(gè)新的任務(wù),而這個(gè)應(yīng)用程序的“main”Activity就會(huì)作為back stack的root Activity)。

當(dāng)這個(gè)Activity在去啟動(dòng)其他的Activity,這個(gè)新的Activity就會(huì)被壓入到“back stack”的棧頂并且獲得焦點(diǎn),之前的那個(gè)Activity仍然保留在棧中,但是卻會(huì)停止(Activity的生命周期)。當(dāng)用戶(hù)按下Back(返回)鍵,當(dāng)前的Activity就會(huì)彈出棧頂(被銷(xiāo)毀),而之前的那個(gè)Activity就會(huì)被恢復(fù)。

如下圖:

如果用戶(hù)繼續(xù)按下返回鍵,那么棧中的Activity會(huì)按照順序一個(gè)個(gè)彈出,知道退出到Home界面(或者退回到啟動(dòng)這個(gè)Task的Activity(多Task))。此時(shí),這個(gè)棧中的所有Activity全部被移除,這個(gè)Task就不存在了。

2、“back stack”永遠(yuǎn)遵循先進(jìn)后出的原則

在“back stack”返回堆棧中的Activity永遠(yuǎn)都會(huì)遵循“?!边@種數(shù)據(jù)結(jié)構(gòu)的基本原則——先進(jìn)后出。永遠(yuǎn)都不會(huì)被重新的排序,只會(huì)不斷的彈出或者壓入。

“back stack”中Activity的存儲(chǔ)和Activity的啟動(dòng)模式密切相關(guān),這點(diǎn)在后面會(huì)學(xué)到,這里先來(lái)用這個(gè)知識(shí)舉個(gè)例子:在一個(gè)棧中有3個(gè)Activity:Activity1,Activity2,Activity3。并且Activity1的啟動(dòng)模式為“singleTask”。如下圖:

3、一個(gè)Task就是內(nèi)聚單元

Android是一個(gè)“多任務(wù)”的系統(tǒng),同一時(shí)刻會(huì)有多個(gè)Task的存在。一個(gè)Task是一個(gè)內(nèi)聚單元,當(dāng)用戶(hù)開(kāi)始一個(gè)新的Task或者通過(guò)Home按鈕返回到Home界面的時(shí)候,該Task可以移動(dòng)到后臺(tái)(background)。當(dāng)一個(gè)Task存在于后臺(tái)的時(shí)候,所有在這個(gè)Task中的Activity都處于Stopped狀態(tài)。但是這個(gè)Task的back stack仍然完好無(wú)損的保存著——它僅僅是被別的Task搶占了焦點(diǎn)。如下圖:

當(dāng)如上如圖的情況下,用戶(hù)仍然可以在Home界面重新選擇TaskA的應(yīng)用程序,讓TaskA獲取焦點(diǎn),并且TaskA的棧頂?shù)腁ctivity Y會(huì)恢復(fù),就像用戶(hù)之前離開(kāi)它的時(shí)候一樣。

4、一個(gè)Activity可以被實(shí)例化多次

因?yàn)樵凇癰ack stack”中的Activity永遠(yuǎn)都不會(huì)重新排序,如果你的應(yīng)用程序允許用戶(hù)在不止一個(gè)Activity去啟動(dòng)另外一個(gè)指定的Activity,那么系統(tǒng)就會(huì)去創(chuàng)建一個(gè)該Activity新的實(shí)例并把它壓入到棧頂(而不是把棧中之前的那個(gè)實(shí)例移動(dòng)到棧頂)。因此,應(yīng)用程序的Activity可能會(huì)被實(shí)例化多次(甚至是在不同的Task中),如下圖:

然而,如果你不想一個(gè)Activity被實(shí)例化多次,我們可以去修改這種行為。這個(gè)將在后面的講到。

二、Activity、Task、Process的關(guān)系

用一張簡(jiǎn)單的圖表示如下:

總結(jié)

以上是生活随笔為你收集整理的activty在哪个栈里面_第二篇Activity:2、任务和返回堆栈(Tasks and Back Stack)之基本介绍...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。