1. 程式人生 > 其它 >Android——Activity的四種啟動模式

Android——Activity的四種啟動模式

簡介:
我們一個程式會存在不同的Activity,也會存在許多例項,這些例項就會進入任務棧中,任務棧採用“後進先出”的演算法,例如:我們使用手機,開啟QQ,在QQ介面進入一個聊天介面,此時存在兩個Activity例項,假設我們按一下back鍵我們將回到QQ主介面,在按一下back鍵我們將回到螢幕主介面,這就是“後進先出”。

Activity的四種啟動模式

standard:系統預設使用此啟動模式,特性:無論例項存在與否,每啟動一次就建立一個例項,如下圖所示

singleTop:此啟動方法分為兩種情況。
一:例如一個任務棧中存在ABCD四個例項,且在D中啟動一個啟動方法為singleTop的例項D,因為此時任務棧中已經存在D,因此係統會回撥OnNewIntent()方式。任務棧中的例項依然為ABCD。

二:依舊任務棧中存在ABCD四個例項,在D中啟動一個啟動方法為singleTop的例項B,因為B已經存在任務棧中,但併為在棧頂,因此想要啟動B,必須建立一個例項B位於棧頂,但之前存在的例項B並未改動,因此任務棧中為ABCDB。
下圖為第一種情況:

singleTask:此模式與singleTop模式舉的第一個例子一樣,但如果想在ABCD任務棧中啟動一個啟動方法為singleTask的例項B,因為singleTask具有clearTop,所有會把比例項B前面的例項清除掉,所有此時任務棧中只存在AB。如下圖所示:

singleInstance:是singleTask的增強版,具有它的所有特性,還具有用此啟動模式啟動的activity只能單獨處於一個任務棧。
說了四種啟動模式,接下來介紹兩種方法在哪裡設定啟動模式,一種是在清單檔案中新增,一種是動態新增。
我們先介紹第一種
一:我們可以看到有四種啟動模式可供選擇

二:
Intent intent = new Intent(); intent.setClass(this,MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);//設定啟動模式 startActivity(intent);
優先順序:如果兩種方式同時存在,我們以設定標誌位為優
Activity常用的Flags:

Intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//指定singleTask模式,與在AndroidManifest.xml中指定android:launchMode"singleTask"效果相同
  
Intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
//指定singleTop模式,與在AndroidManifest.xml中指定android:launchMode"singleTop"效果相同
 
Intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//具有這個標誌的Activity啟動時,在同一個任務棧中所有位於它上面的Activity都要出棧,一般會和singleTask模式一起出現,可以理解為我們舉例的singleTask第二個例子
 
Intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
//具有這個標誌的Activity不會出現在歷史的Activity列表中,它等同於在AndroidManifest.xml中指定android:excludeFromRecents="true"