最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android編程中Activity的四種啟動(dòng)模式

 更新時(shí)間:2016年04月12日 10:43:13   作者:肚皮會(huì)唱歌  
這篇文章主要介紹了Android編程中Activity的四種啟動(dòng)模式,較為詳細(xì)的分析了Activity四種啟動(dòng)模式的原理與功能,需要的朋友可以參考下

本文實(shí)例講述了Android編程中Activity的四種啟動(dòng)模式。分享給大家供大家參考,具體如下:

Activity啟動(dòng)方式有四種,分別是:

standard
singleTop
singleTask
singleInstance

可以根據(jù)實(shí)際的需求為Activity設(shè)置對(duì)應(yīng)的啟動(dòng)模式,從而可以避免創(chuàng)建大量重復(fù)的Activity等問題。

設(shè)置Activity的啟動(dòng)模式,只需要在AndroidManifest.xml里對(duì)應(yīng)的<activity>標(biāo)簽設(shè)置android:launchMode屬性,例如:

<activity 
  android:name=".A1" 
  android:launchMode="standard" /> 

下面是這四種模式的作用:

standard

默認(rèn)模式,可以不用寫配置。在這個(gè)模式下,都會(huì)默認(rèn)創(chuàng)建一個(gè)新的實(shí)例。因此,在這種模式下,可以有多個(gè)相同的實(shí)例,也允許多個(gè)相同Activity疊加。

例如:

若我有一個(gè)Activity名為A1, 上面有一個(gè)按鈕可跳轉(zhuǎn)到A1。那么如果我點(diǎn)擊按鈕,便會(huì)新啟一個(gè)Activity A1疊在剛才的A1之上,再點(diǎn)擊,又會(huì)再新啟一個(gè)在它之上……

點(diǎn)back鍵會(huì)依照棧順序依次退出。

singleTop

可以有多個(gè)實(shí)例,但是不允許多個(gè)相同Activity疊加。即,如果Activity在棧頂?shù)臅r(shí)候,啟動(dòng)相同的Activity,不會(huì)創(chuàng)建新的實(shí)例,而會(huì)調(diào)用其onNewIntent方法。

例如:

若我有兩個(gè)Activity名為B1,B2,兩個(gè)Activity內(nèi)容功能完全相同,都有兩個(gè)按鈕可以跳到B1或者B2,唯一不同的是B1為standard,B2為singleTop。
若我意圖打開的順序?yàn)锽1->B2->B2,則實(shí)際打開的順序?yàn)锽1->B2(后一次意圖打開B2,實(shí)際只調(diào)用了前一個(gè)的onNewIntent方法)
若我意圖打開的順序?yàn)锽1->B2->B1->B2,則實(shí)際打開的順序與意圖的一致,為B1->B2->B1->B2。

singleTask

只有一個(gè)實(shí)例。在同一個(gè)應(yīng)用程序中啟動(dòng)他的時(shí)候,若Activity不存在,則會(huì)在當(dāng)前task創(chuàng)建一個(gè)新的實(shí)例,若存在,則會(huì)把task中在其之上的其它Activity destory掉并調(diào)用它的onNewIntent方法。

如果是在別的應(yīng)用程序中啟動(dòng)它,則會(huì)新建一個(gè)task,并在該task中啟動(dòng)這個(gè)Activity,singleTask允許別的Activity與其在一個(gè)task中共存,也就是說,如果我在這個(gè)singleTask的實(shí)例中再打開新的Activity,這個(gè)新的Activity還是會(huì)在singleTask的實(shí)例的task中。

例如:

若我的應(yīng)用程序中有三個(gè)Activity,C1,C2,C3,三個(gè)Activity可互相啟動(dòng),其中C2為singleTask模式,那么,無(wú)論我在這個(gè)程序中如何點(diǎn)擊啟動(dòng),如:C1->C2->C3->C2->C3->C1-C2,C1,C3可能存在多個(gè)實(shí)例,但是C2只會(huì)存在一個(gè),并且這三個(gè)Activity都在同一個(gè)task里面。

但是C1->C2->C3->C2->C3->C1-C2,這樣的操作過程實(shí)際應(yīng)該是如下這樣的,因?yàn)閟ingleTask會(huì)把task中在其之上的其它Activity destory掉。

操作:C1->C2          C1->C2->C3          C1->C2->C3->C2            C1->C2->C3->C2->C3->C1             C1->C2->C3->C2->C3->C1-C2
實(shí)際:C1->C2          C1->C2->C3          C1->C2                              C1->C2->C3->C1                               C1->C2

若是別的應(yīng)用程序打開C2,則會(huì)新啟一個(gè)task。

如別的應(yīng)用Other中有一個(gè)activity,taskId為200,從它打開C2,則C2的taskIdI不會(huì)為200,例如C2的taskId為201,那么再?gòu)腃2打開C1、C3,則C2、C3的taskId仍為201。

注意:如果此時(shí)你點(diǎn)擊home,然后再打開Other,發(fā)現(xiàn)這時(shí)顯示的肯定會(huì)是Other應(yīng)用中的內(nèi)容,而不會(huì)是我們應(yīng)用中的C1 C2 C3中的其中一個(gè)。

singleInstance

只有一個(gè)實(shí)例,并且這個(gè)實(shí)例獨(dú)立運(yùn)行在一個(gè)task中,這個(gè)task只有這個(gè)實(shí)例,不允許有別的Activity存在。

例如:

程序有三個(gè)ActivityD1,D2,D3,三個(gè)Activity可互相啟動(dòng),其中D2為singleInstance模式。那么程序從D1開始運(yùn)行,假設(shè)D1的taskId為200,那么從D1啟動(dòng)D2時(shí),D2會(huì)新啟動(dòng)一個(gè)task,即D2與D1不在一個(gè)task中運(yùn)行。假設(shè)D2的taskId為201,再?gòu)腄2啟動(dòng)D3時(shí),D3的taskId為200,也就是說它被壓到了D1啟動(dòng)的任務(wù)棧中。

若是在別的應(yīng)用程序打開D2,假設(shè)Other的taskId為200,打開D2,D2會(huì)新建一個(gè)task運(yùn)行,假設(shè)它的taskId為201,那么如果這時(shí)再?gòu)腄2啟動(dòng)D1或者D3,則又會(huì)再創(chuàng)建一個(gè)task,因此,若操作步驟為other->D2->D1,這過程就涉及到了3個(gè)task了。

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android通信方式總結(jié)》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android開發(fā)入門與進(jìn)階教程》、《Android基本組件用法總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論

青阳县| 黑山县| 阿城市| 肃北| 呼玛县| 巴东县| 于都县| 菏泽市| 平和县| 濮阳县| 新宁县| 德清县| 汾阳市| 隆林| 镇原县| 习水县| 天台县| 宜兰市| 玉门市| 滕州市| 桦甸市| 宾川县| 台前县| 娱乐| 上思县| 邯郸县| 彭泽县| 娄烦县| 石台县| 文昌市| 德惠市| 安陆市| 达州市| 平乡县| 偏关县| 兴化市| 登封市| 张家界市| 左云县| 盘山县| 南康市|