自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android應(yīng)用程序組件Activity的"singleTask"(1)

移動開發(fā) Android
在Android應(yīng)用程序中,可以配置Activity以四種方式來啟動,其中最令人迷惑的就是"singleTask"這種方式了,官方文檔稱以這種方式啟動的Activity總是屬于一個(gè)任務(wù)的根Activity。果真如此嗎?本文將為你解開Activity的"singleTask"之謎。

在Android應(yīng)用程序中,可以配置Activity以四種方式來啟動,其中最令人迷惑的就是"singleTask"這種方式了,官方文檔稱以這種方式啟動的Activity總是屬于一個(gè)任務(wù)的根Activity。果真如此嗎?本文將為你解開Activity的"singleTask"之謎。

在解開這個(gè)謎之前,我們先來簡單了解一下在Android應(yīng)用程序中,任務(wù)(Task)是個(gè)什么樣的概念。我們知道,Activity是 Android應(yīng)用程序的基礎(chǔ)組件之一,在應(yīng)用程序運(yùn)行時(shí),每一個(gè)Activity代表一個(gè)用戶操作。用戶為了完成某個(gè)功能而執(zhí)行的一系列操作就形成了一 個(gè)Activity序列,這個(gè)序列在Android應(yīng)用程序中就稱之為任務(wù),它是從用戶體驗(yàn)的角度出發(fā),把一組相關(guān)的Activity組織在一起而抽象出 來的概念。

對初學(xué)者來說,在開發(fā)Android應(yīng)用程序時(shí),對任務(wù)的概念可能不是那么的直觀,一般我們只關(guān)注如何實(shí)現(xiàn)應(yīng)用程序中的每一個(gè)Activity。事實(shí) 上,Android系統(tǒng)中的任務(wù)更多的是體現(xiàn)是應(yīng)用程序運(yùn)行的時(shí)候,因此,它相對于Activity來說是動態(tài)存在的,這就是為什么我們在開發(fā)時(shí)對任務(wù)這 個(gè)概念不是那么直觀的原因。不過,我們在開發(fā)Android應(yīng)用程序時(shí),還是可以配置Activity的任務(wù)屬性的,即告訴系統(tǒng),它是要在新的任務(wù)中啟動 呢,還是在已有的任務(wù)中啟動,亦或是其它的Activity能不能與它共享同一個(gè)任務(wù),具體配置請參考官方文檔:

http://developer.android.com/gui ... and-back-stack.html

它是這樣介紹以"singleTask"方式啟動的Activity的:

The system creates a new task and instantiates the activity at the root of the new task. However, if an instance of the activity already exists in a separate task, the system routes the intent to the existing instance through a call to its onNewIntent() method, rather than creating a new instance. Only one instance of the activity can exist at a time.

它明確說明,以"singleTask"方式啟動的Activity,全局只有***個(gè)實(shí)例存在,因此,當(dāng)我們***次啟動這個(gè)Activity時(shí),系統(tǒng) 便會創(chuàng)建一個(gè)新的任務(wù),并且初始化一個(gè)這樣的Activity的實(shí)例,放在新任務(wù)的底部,如果下次再啟動這個(gè)Activity時(shí),系統(tǒng)發(fā)現(xiàn)已經(jīng)存在這樣的 Activity實(shí)例,就會調(diào)用這個(gè)Activity實(shí)例的onNewIntent成員函數(shù),從而把它激活起來。從這句話就可以推斷出, 以"singleTask"方式啟動的Activity總是屬于一個(gè)任務(wù)的根Activity。

但是文檔接著舉例子說明,當(dāng)用戶按下鍵盤上的Back鍵時(shí),如果此時(shí)在前臺中運(yùn)行的任務(wù)堆棧頂端是一個(gè)"singleTask"的Activity,系統(tǒng)會回到當(dāng)前任務(wù)的下一個(gè)Activity中去,而不是回到前一個(gè)Activity中去,如下圖所示:

真是坑爹啊!有木有!前面剛說"singleTask"會在新的任務(wù)中運(yùn)行,并且位于任務(wù)堆棧的底部,這里在Task B中,一個(gè)赤裸裸的帶著"singleTask"標(biāo)簽的箭頭無情地指向Task B堆棧頂端的Activity Y,剛轉(zhuǎn)身就翻臉不認(rèn)人了呢!

獅屎勝于熊便,我們來做一個(gè)實(shí)驗(yàn)吧,看看到底在啟動這個(gè)"singleTask"的Activity的時(shí)候,它是位于新任務(wù)堆棧的底部呢,還是在已有任務(wù)的頂部。

責(zé)任編輯:閆佳明 來源: bbs.9ria
相關(guān)推薦

2014-05-27 15:04:15

AndroidActivitysingleTask

2014-05-27 15:09:13

AndroidActivitysingleTask

2014-05-27 14:59:24

AndroidActivitysingleTask

2014-05-27 14:33:37

AndroidActivitysingleTask

2014-05-27 14:16:08

AndroidActivitysingleTask

2014-05-27 15:07:07

AndroidActivitysingleTask

2014-05-27 15:11:20

AndroidActivitysingleTask

2014-05-27 15:17:46

AndroidActivitysingleTask

2014-05-27 14:44:26

AndroidActivitysingleTask

2014-05-27 14:28:25

AndroidActivitysingleTask

2014-05-27 14:12:49

AndroidActivitysingleTask

2010-02-06 15:26:11

Android應(yīng)用程序

2009-08-14 17:08:00

Android應(yīng)用程序

2013-01-17 15:51:42

Android開發(fā)應(yīng)用程序組件

2010-11-11 14:38:37

2012-04-25 22:56:10

Android

2010-03-03 16:45:46

Android應(yīng)用程序

2011-05-24 16:09:57

Androi

2022-09-27 15:16:42

開發(fā)Android應(yīng)用程序

2010-01-25 13:29:53

Android本地應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號