1. 程式人生 > >Activity啟動模式&任務棧

Activity啟動模式&任務棧

Activity啟動模式設定: 


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


Activity的四種啟動模式: 


1. standard


        模式啟動模式,每次啟用Activity時都會建立Activity,並放入任務棧中。 


  2. singleTop


        如果在任務的棧頂正好存在該Activity的例項, 就重用該例項,否者就會建立新的例項並放入棧頂(即使棧中已經存在該Activity例項,只要不在棧頂,都會建立例項)。 


3. singleTask



        如果在棧中已經有該Activity的例項,就重用該例項(會呼叫例項的onNewIntent())。重用時,會讓該例項回到棧頂,因此在它上面的例項將會被移除棧。如果棧中不存在該例項,將會建立新的例項放入棧中。  


4. singleInstance


        在一個新棧中建立該Activity例項,並讓多個應用共享改棧中的該Activity例項。一旦該模式的Activity的例項存在於某個棧中,任何應用再啟用改Activity時都會重用該棧中的例項,其效果相當於多個應用程式共享一個應用,不管誰啟用該Activity都會進入同一個應用中。

http://my.oschina.net/u/1246663/blog/202272 

附任務棧:

From Google官網:理解可能有錯,希望被指出,謝謝啦!!

一個任務對應一個棧,棧中可能存在多個Activity

正常不做任何設定,你的Activity跳轉應該是下圖所示:

對於此圖,從頭到尾只有一個任務和棧

相同的Activity預設是會再建立一個例項,而不是複用,如下圖的HomeActivity(建立了2個例項)

通常有2種方式設定Activity的啟動模式:

1.在AndroidMainfest <Activity>標籤中加入屬性launchMode:

1.standard(預設就是這個)

2.singleTop 討論這個前提是在一個任務中的,假設我的activity b啟動模式是singleTop的,如果出現類似於a-b 然後我再啟動b的時候將仍然是a-b而不是a-b-b,如果是b-a,我再啟動b時,則會是b-a-b.(還是建立了一個)

3.singleTask 假設我有個activity b是singleTask模式,首先如果分離的任務中不存在b,那麼將建立一個新任務,然後將b作為該任務的根,也就是在該任務的棧底,反之如果有一任務棧中已經存在b,b所在任務棧中之前的activities都將被清掉,之後的全部被帶進來.

此圖所沒涉及到的是:假如image位置倒一下,X在上Y在下,那麼當2啟動Y時候,X會被清掉。

4.singleInstance 除了包含singleTask一些性質外,singleInstance還有一個重要的特點,就是它所處的任務棧中只有它一個例項。

2.設定Intent的Flag,主要有3種Flag

1.FLAG_ACTIVITY_NEW_TASK 這個作用與singleTask模式一樣。

2.FLAG_ACTIVITY_SINGLE_TOP 這個作用與singleTop模式一樣。

3.FLAG_ACTIVITY_CLEAR_TOP 討論這個前提是在一個任務棧中的,假設B是以這個標誌啟動的,比如A-B-C-D 我在啟動B最後結果將是A-B,C-D會被清掉。

關於任務的棧:

當你的任務棧被置於後臺的時候,過了一定量的時間,系統會把你這個任務棧中的Activities清得只剩下根Activity,因為它認為使用者已經“遺棄了”。

當然你可以修改這種預設行為,通過在<Activity>標籤里加入屬性:

1.alwaysRetainTaskState 這個屬性加入到你根Activity上,即便你的任務在後臺,系統也儘量儲存你整個任務狀態,當然我們這裡不討論資源緊張的時這種特殊情況。

2.clearTaskOnLaunch 這個屬性加入到你根Activity上,效果於前面的相反,Task將被清光,即便離開只是一小會。

3.finishOnTaskLaunch 這個屬性跟上一個類似,不過他針對是單個Activity.(沒試過)

總結:

singleTask和singleInstance都會建立一個新的Task,我們使用應該只用在啟動的activity有一個action Main和category launcher的時候,也就是啟動另外一個程式的時候。

之所以這麼說是因為,假設一個任務棧A-B 然後B啟動C的時候使用singleTask,C就處於一個新的任務棧中,當用戶在C上操作了好長一段時間,你的A-B這個任務棧可能會被系統回收掉,那時候你再按HOME鍵,就會丟失了C,因為C不代表這個APP。(這個是我的理解,可能有錯)。

鑑於此,如果你要使用的話,比如像C這種情況,既然我找不到了,那我就不希望它還活著,就可以在C activity標籤里加入finishOnTaskLaunch.

http://my.oschina.net/wangjunhe/blog/97552

相關推薦

Activity啟動模式&任務

Activity啟動模式設定:         <activity android:name=".MainActivity" android:launchMode="standard" /> Activity的四種啟動模式: 1. standard     

Activity 啟動模式任務管理

什麼是任務棧 Android系統中,Activity代表一個個視窗,負責直接和使用者進行互動。一個應用包含很多的視窗即Activities,同時可以從這個應用去開啟存在於其他應用中的activities例如從Photo應用要分享一張照片到朋友圈,則會通過當前的

Activity啟動模式任務(Task)全面深入記錄(上)

任務棧簡單入門   最近又把兩本進階書看了一遍,但總感覺好記性不如爛筆頭,所以還是決定通過部落格記錄一下,我們將分兩篇來全面深入地記錄Activity 啟動模式與任務棧的內容。 android任務棧簡單瞭解 1. android任務棧又稱為Ta

Activity啟動模式的深入分析

啟用 ide net 啟動模式 soft adding class 任務 新的 網上關於Activity啟動模式的文章許多。可是看起來都千篇一律,看完之後我們都能理解這4種啟動模式。只是官方api對singleTask這個啟動模式解釋有些爭議,導致我事實

activity啟動模式之singleTop

att pear protect logs 實例 點擊 launch 操作 @override activity啟動模式之singleTop 一、簡介 二、設置方法 在AndroidManifest.xml中將要設置為singleTop啟動模式的頁面進行配置 <

Android Activity 啟動模式

.aspx art www 設置 instance ini cnblogs 順序 http Android啟動模式也就是Activity任務棧的運行模式:任務棧是用來存儲Activity的 在AndroidManifest.xml中的標簽

關於Activity啟動模式の學習

開始去學習Android的一些基礎的知識,開始從新做人,一步步腳踏實地的去了解這個系統 今天看的是關於Activity的啟動模式的文章,記下來防止自己遺忘了: Activity的啟動模式一共有四種,分別為standard,singleTop(棧頂模式),singleTask(複用模式),si

Activity啟動模式之SingleInstance

啟動模式系列之:Activity啟動模式(Standrd和SingleTop) 啟動模式系列之:Activity啟動模式(SingleTask) 啟動模式系列之:Activity啟動模式(SingleInstance) 一,SingleInstance模式(單例項模式)

探索Activity啟動模式

LifecycleActivity記為A,LifecycleActivity2記為B 一, Standard 略. 二, SingleTop 開啟App,啟動第一個Activity(A1),看到taskId == 2215 D/PRETTY_LOGGER: │ taskCou

Android-Activity啟動模式(launchMode)

Activity啟動模式是非常重要的一塊內容,啟動模式直接關係到使用者的體驗 和 效能的提升等   Activity啟動模式分為四種:      如果不配置:launchMode,預設就是:standard 標準的   standard 標準的   singleTop 獨佔頂端   s

Android-Activity啟動模式-應用場景

在上一篇部落格中,Android-Activity啟動模式(launchMode),就介紹了Activity四種啟動模式的特點與使用等,但是到底什麼樣子的場景,去使用什麼樣子的啟動模式呢     Activity啟動模式分為四種:      如果不配置:launchMode,預設

Android四大元件之Activity-啟動模式

1.Activity的啟動模式 當我們多次呼叫同一個Activity時,系統會重複建立多個例項並把它們一一放入任務棧中,這種方式顯然不符合我們的設計要求。所以Android在設計時就提供了四種啟動模式來解決此問題。 四種啟動模式分別如下: standard-標

android Activity 啟動模式 應用場景

棧的原理:先進後出,後進先出。所有操作都發生在棧頂。 首先介紹一下任務棧: (1)程式開啟時就建立了一個任務棧, 用於儲存當前程式的activity,所有的activity屬於一個任務棧。  (2)一個任務棧包含了一個activity的集合, 去有序的選擇哪一個activ

Activity啟動模式

一,啟動模式分類: Standard(標準模式,預設) SingleTop(棧頂複用模式) SingleTask(棧內複用模式) SingleInstance(單例項模式) 通過AndroidManifest可配置Activity的LaunchMode.如果

Activity啟動模式圖文詳解:standard, singleTop, singleTask 以及 singleInstance

英文原文:Understand Android Activity's launchMode: standard, singleTop, singleTask and singleInstance  另外關於啟動模式還有篇很好的文章:Android中Activity四種啟動模式和taskAf

Android-intent.addFlags-Activity啟動模式

之前寫的Android-Activity啟動模式(launchMode),Android-Activity啟動模式-應用場景,講解的都是在AndroidManifest.xml配置launchMode="四種啟動模式" Activity啟動模式分為四種:      如果不配置:launchMode,預設

Android Activity啟動模式設定為SingleTask需要注意的地方

Android Activity啟動模式設定為SingleTask需要注意的地方 當Activity跳轉到啟動模式為SingleTask的Activity的時候,onRestart()不再回調,而是回撥 onNewInstance(Intent intent) 方法,其中引數可

Android Activity啟動模式的設定

    Android為了使我們能夠打破預設的堆疊的先後出的模式,提供了兩個種方式:一種是在AndroidManifest.xml定義Activity時指定它的載入模式,另一種是在用Intent開啟一個Activity時,在Intent中加入標誌。如果兩種方式都用了,則後

圖解Activity啟動模式-參考官方文件

launchMode: 1.standard 如果啟動該Activity的context是Activity,則新建一個Activity例項,該target Activity在source Activity的Task中。如果啟動改Activity的context不是Activity,則新建一個

[Android]當Activity啟動模式為singleTask時的生命週期

01-09 22:59:24.317 13063-13063/com.dongua.activitytest I/Activity1: onCreate: 01-09 22:59:24.319 130