中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Activity和Task的啟動模式有哪些? 每種含義是什么?

發布時間:2020-06-28 17:57:18 來源:網絡 閱讀:1076 作者:無心小書童 欄目:移動開發

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

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

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

   singleTask: 會在一個新的task中產生這個實例,以后每次調用都會使用這個,不會去產生新的實例了。 

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

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



它們主要有如下不同:

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

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

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

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

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

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

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

Activity的加載模式受啟動Activity的Intent對象中設置的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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

木里| 拜泉县| 石泉县| 旬阳县| 静宁县| 汉源县| 兴文县| 崇阳县| 昆山市| 南部县| 西华县| 东乡族自治县| 孝义市| 商南县| 新余市| 治多县| 嵊州市| 仁怀市| 邮箱| 兰西县| 凤阳县| 南安市| 宁陵县| 鄢陵县| 泰兴市| 淅川县| 陈巴尔虎旗| 武义县| 竹北市| 双柏县| 宁海县| 石林| 茌平县| 长子县| 察雅县| 信丰县| 资讯| 错那县| 长兴县| 双牌县| 神池县|