簡介:
我們一個程式會存在不同的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"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/262954.html
標籤:其他
