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

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

  standard: 標準模式,也是默認模式,一調(diào)用startActivity()方法就會產(chǎn)生一個新的實例。

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

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

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

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

它們主要有如下不同:

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

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

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

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

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

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

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

Activity的加載模式受啟動Activity的Intent對象中設(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è)計團隊扎實的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識和豐厚的資源優(yōu)勢,提供專業(yè)的網(wǎng)站策劃、成都做網(wǎng)站、成都網(wǎng)站設(shè)計、成都外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務(wù),在成都10余年的網(wǎng)站建設(shè)設(shè)計經(jīng)驗,為成都近千家中小型企業(yè)策劃設(shè)計了網(wǎng)站。

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

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

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

廣告

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

網(wǎng)站托管運營