天天看點

Android——Activity四種啟動模式

原文位址:http://blog.csdn.net/sapce_fish/article/details/52672495

Android中Activity的啟動方式主要有四種
  • standard的啟動方式
  • singleTop的啟動方式
  • singleTask的啟動方式
  • singleInstance的啟動方式
demo下載下傳位址:http://download.csdn.net/detail/sapce_fish/9641214

先說一下設定Activity啟動模式的方式,在manifest檔案中,給對應Activity設定android:launchMode屬性,此屬性有四個值,分别對應四種啟動模式,如不設定此屬性則預設為standar啟動模式

Android——Activity四種啟動模式

下面來分别介紹一下這四種啟動方式

standard啟動方式

standard啟動模式為activity的預設啟動模式,來看看standard啟動模式是怎樣的

直接啟動應用

Android——Activity四種啟動模式

這是MainActivity,可以看到上面顯示taskId以及目前activity的序列号

接下來我們點選按鈕跳轉到standardActivity

Android——Activity四種啟動模式

可以看到目前的standardActivity的taskId為27291序列号為24fb2aeb

再次點選跳轉按鈕

Android——Activity四種啟動模式
目前也是在StandardActivity界面,但是Activity的序列号已經變成28831b78說明這是一個新的執行個體,按下傳回鍵回到了上一個StandardActivity即序列号為 24fb2aeb的StandardActivity,再按傳回鍵傳回到了MainActivity,至此我們應該明白了Standard模式就是每次都會重新執行個體化Activity而不會進行複用。

singleTop啟動方式

在demon中添加一個singleTopActivity後啟動應用
Android——Activity四種啟動模式
點選跳轉到single top Activity按鈕
Android——Activity四種啟動模式

可以看到目前singleTopActivity的序列号為29017251

再點選跳轉到single top Activity按鈕

Android——Activity四種啟動模式
點選後發現目前singleTopActivity的序列号也是29017251說明是同一個執行個體(此時如果點選傳回鍵就退到了MainActivity)我們點選跳轉到main Activity按鈕
Android——Activity四種啟動模式
點選跳轉到single Top Activity按鈕
Android——Activity四種啟動模式

此時singleTopActivity的序列号為301a5811而不是29017251即這是一個新的singleTopActivity執行個體

是以singleTop模式就是目标Activity已經在棧頂時(即最上層)則不重新建立執行個體而是直接複用,如果不在棧頂則會重新執行個體化

singleTask啟動方式

同樣的在demon中添加一個singleTaskActivity後啟動應用
Android——Activity四種啟動模式
點選跳轉到single task Activity按鈕
Android——Activity四種啟動模式

此時singleTaskActivity的序列号為325c7c0a

我們再點選跳轉到single task Activity按鈕

Android——Activity四種啟動模式

發現此時的序列号和點選之前的是一樣的,即目前activity跟點選之前是同一執行個體

我們現在來點選跳轉到main Activity按鈕

Android——Activity四種啟動模式
繼續點選跳轉到single task Activity按鈕
Android——Activity四種啟動模式

發現singleTaskActivity的序列号跟之前的還是一樣的即是同一個執行個體,由此我們發現singleTask模式就是當目标activity在棧中有執行個體時則不重新建立執行個體而是直接複用之前的執行個體

注意:singleTaskActivity複用之前的執行個體是先将在其上的其他執行個體先出棧

singleInstance啟動方式

singleInstace啟動模式跟之前3種啟動模式比較不一樣,具體我們先來看一下

首先啟動應用

Android——Activity四種啟動模式

我們現在看一下目前的taskId為27383

接着點選跳轉到single instance Activity按鈕

Android——Activity四種啟動模式

此時的taskId為27384說明目前這個activity跟之前的activity不在同一個棧中,而是在一個單獨的棧中

我們繼續點選跳轉到single instance Activity按鈕

Android——Activity四種啟動模式

此時的taskId跟之前的是相同的,說明是在同一個棧裡,序列号也是一樣的說明是同一個執行個體

我們再點選跳轉到main Activity按鈕

Android——Activity四種啟動模式
此時mainActivity的taskId跟之前是一樣的,說明跟之前的Activity是在同一個棧中的,但是序列号不一樣,這個是正常的因為mainActivity采用的是預設的啟動模式(即standard模式)是以會重新執行個體化,由此我們可以知道被聲明為singleInstance模式activity會被單獨放在一個堆棧中,當需要啟動的目标activity聲明為singleInstance模式并且在系統中存在則會直接複用
說了這麼多最後用自己的話來描述一下這四種啟動模式吧,如果描述的不夠準确或是有誤的地方歡迎各位指出
standard模式 每次都會重新生成一個執行個體
singleTop模式 如果在棧頂有目前activity的執行個體則直接使用,否則重新生成一個執行個體
singleTask模式 如果在棧中有目前activity的執行個體則直接使用(如果有執行個體但不在棧頂則将其之上的執行個體出棧),否則重新生成一個執行個體
singleInstance模式 如果系統中有目前activity執行個體則直接使用,否則重新生成執行個體并放置在單獨的棧中

至此已經介紹了Activity的四種啟動模式

如果有不明白的地方可以留言。有寫錯或者不好的地方歡迎指正