Activity和Task的啟動(dòng)模式有哪些?每種含義是什么?-創(chuàng)新互聯(lián)

在多Activity開(kāi)發(fā)中,有可能是自己應(yīng)用之間的Activity跳轉(zhuǎn),或者夾帶其他應(yīng)用的可復(fù)用Activity。可能會(huì)希望跳轉(zhuǎn)到原來(lái)某個(gè)Activity實(shí)例,而不是產(chǎn)生大量重復(fù)的Activity。這需要為Activity配置特定的加載模式,而不是使用默認(rèn)的加載模式。
在android里,有4種activity的啟動(dòng)模式,分別為:

  standard: 標(biāo)準(zhǔn)模式,也是默認(rèn)模式,一調(diào)用startActivity()方法就會(huì)產(chǎn)生一個(gè)新的實(shí)例。

  singleTop: 如果已經(jīng)有一個(gè)實(shí)例位于Activity棧的頂部時(shí),就不產(chǎn)生新的實(shí)例,而只是調(diào)用Activity中的newInstance()方法。如果不位于棧頂,會(huì)產(chǎn)生一個(gè)新的實(shí)例。

  singleTask: 會(huì)在一個(gè)新的task中產(chǎn)生這個(gè)實(shí)例,以后每次調(diào)用都會(huì)使用這個(gè),不會(huì)去產(chǎn)生新的實(shí)例了。

  singleInstance: 這個(gè)跟singleTask基本上是一樣,只有一個(gè)區(qū)別:在這個(gè)模式下的Activity實(shí)例所處的task中,只能有這個(gè)activity實(shí)例,不能有其他的實(shí)例。

  這些啟動(dòng)模式可以在功能清單文件AndroidManifest.xml中進(jìn)行設(shè)置,<activity>中的launchMode屬性。 設(shè)置的位置在AndroidManifest.xml文件中activity元素的android:launchMode屬性:
<activity android:name="ActB" android:launchMode="singleTask"></activity>
也可以在Eclipse ADT中圖形界面中編輯:

它們主要有如下不同:

1. 如何決定所屬task
“standard”和”singleTop”的activity的目標(biāo)task,和收到的Intent的發(fā)送者在同一個(gè)task內(nèi),除非intent包括參數(shù)FLAG_ACTIVITY_NEW_TASK。
如果提供了FLAG_ACTIVITY_NEW_TASK參數(shù),會(huì)啟動(dòng)到別的task里。

2. 是否允許多個(gè)實(shí)例
“standard”和”singleTop”可以被實(shí)例化多次,并且存在于不同的task中,且一個(gè)task可以包括一個(gè)activity的多個(gè)實(shí)例;
“singleTask”和”singleInstance”則限制只生成一個(gè)實(shí)例,并且是task的根元素。
singleTop要求如果創(chuàng)建intent的時(shí)候棧頂已經(jīng)有要?jiǎng)?chuàng)建的Activity的實(shí)例,則將intent發(fā)送給該實(shí)例,而不發(fā)送給新的實(shí)例。

3. 是否允許其它activity存在于本task內(nèi)
“singleInstance”獨(dú)占一個(gè)task,其它activity不能存在那個(gè)task里;如果它啟動(dòng)了一個(gè)新的activity,不管新的activity的launch mode 如何,新的activity都將會(huì)到別的task里運(yùn)行(如同加了FLAG_ACTIVITY_NEW_TASK參數(shù))。
而另外三種模式,則可以和其它activity共存。

4. 是否每次都生成新實(shí)例
“standard”對(duì)于沒(méi)一個(gè)啟動(dòng)Intent都會(huì)生成一個(gè)activity的新實(shí)例;
“singleTop”的activity如果在task的棧頂?shù)脑?,則不生成新的該activity的實(shí)例,直接使用棧頂?shù)膶?shí)例,否則,生成該activity的實(shí)例。singleTop模式,可用來(lái)解決棧頂多個(gè)重復(fù)相同的Activity的問(wèn)題。
比如現(xiàn)在task棧元素為A-B-C-D(D在棧頂), 這時(shí)候給D發(fā)一個(gè)啟動(dòng)intent,如果D是“standard”的,則生成D的一個(gè)新實(shí)例, 棧變?yōu)锳-B-C-D-D。
如果D是singleTop的話,則不會(huì)生產(chǎn)D的新實(shí)例,棧狀態(tài)仍為A-B-C-D。
如果這時(shí)候給B發(fā)Intent的話,不管B的launchmode是”standard” 還是 “singleTop”,都會(huì)生成B的新實(shí)例,棧狀態(tài)變?yōu)锳-B-C-D-B。
singleTask模式和后面的singleInstance模式都是只創(chuàng)建一個(gè)實(shí)例的。
當(dāng)intent到來(lái),需要?jiǎng)?chuàng)建singleTask模式Activity的時(shí)候,系統(tǒng)會(huì)檢查棧里面是否已經(jīng)有該Activity的實(shí)例。如果有直接將intent發(fā)送給它。

“singleInstance”是其所在棧的唯一activity,它會(huì)每次都被重用。

“singleTask”如果在棧頂,則接受intent,否則,該intent會(huì)被丟棄,但是該task仍會(huì)回到前臺(tái)。

當(dāng)已經(jīng)存在的activity實(shí)例處理新的intent時(shí)候,會(huì)調(diào)用onNewIntent()方法,如果收到intent生成一個(gè)activity實(shí)例,那么用戶可以通過(guò)back鍵回到上一個(gè)狀態(tài);如果是已經(jīng)存在的一個(gè)activity來(lái)處理這個(gè)intent的話,用戶不能通過(guò)按back鍵返回到這之前的狀態(tài)。

Activity的加載模式受啟動(dòng)Activity的Intent對(duì)象中設(shè)置的Flag和manifest文件中Activity的<activity>元素的特性值交互控制。

下面是影響加載模式的一些特性

核心的Intent Flag有:
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
FLAG_ACTIVITY_SINGLE_TOP

核心的<activity>特性有:
taskAffinity
launchMode
allowTaskReparenting
clearTaskOnLaunch
alwaysRetainTaskState
finishOnTaskLaunch

創(chuàng)新互聯(lián)憑借專業(yè)的設(shè)計(jì)團(tuán)隊(duì)扎實(shí)的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識(shí)和豐厚的資源優(yōu)勢(shì),提供專業(yè)的網(wǎng)站策劃、成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站優(yōu)化、軟件開(kāi)發(fā)、網(wǎng)站改版等服務(wù),在成都10余年的網(wǎng)站建設(shè)設(shè)計(jì)經(jīng)驗(yàn),為成都近千家中小型企業(yè)策劃設(shè)計(jì)了網(wǎng)站。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

分享名稱:Activity和Task的啟動(dòng)模式有哪些?每種含義是什么?-創(chuàng)新互聯(lián)
瀏覽路徑:http://www.muchs.cn/article0/dpciio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站企業(yè)網(wǎng)站制作、網(wǎng)站策劃虛擬主機(jī)、用戶體驗(yàn)網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)