Android——Activity的四種啟動模式
簡介:
我們一個程式會存在不同的Activity,也會存在許多例項,這些例項就會進入任務棧中,任務棧採用“後進先出”的演算法,例如:我們使用手機,開啟QQ,在QQ介面進入一個聊天介面,此時存在兩個Activity例項,假設我們按一下back鍵我們將回到QQ主介面,在按一下back鍵我們將回到螢幕主介面,這就是“後進先出”。
Activity的四種啟動模式
standard:系統預設使用此啟動模式,特性:無論例項存在與否,每啟動一次就建立一個例項,如下圖所示
singleTop:此啟動方法分為兩種情況。
一:例如一個任務棧中存在ABCD四個例項,且在D中啟動一個啟動方法為singleTop的例項D,因為此時任務棧中已經存在D,因此係統會回撥OnNewIntent()方式。任務棧中的例項依然為ABCD。
下圖為第一種情況:
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"