Android的啟動模式
- standard:標準模式
- singleTop:棧頂復用模式
- singleTask:棧內復用模式
- singleInstance:單實例模式
啟動Activity時并指定啟動模式有兩種方式
- 一種是在清單文件中指明
- 另一種則是在Intent中添加FLAG標志位
默認是標準模式
standard啟動模式
系統在啟動 Activity 的任務中創(chuàng)建 Activity 的新實例并向其傳送 Intent。Activity 可以多次實例化,而每個實例均可屬于不同的任務,并且一個任務可以擁有多個實例。
//standard模式啟動A
public void standardStartA(View view) {
startActivity(new Intent(this, ActivityA.class));
}
創(chuàng)建Activity然后與任務關聯
singleTop啟動模式
- 如果當前任務的頂部已存在 Activity 的一個實例,則系統會通過調用該實例的 onNewIntent() 方法向其傳送 Intent,而不是創(chuàng)建 Activity 的新實例.
- Activity 可以多次實例化,而每個實例均可屬于不同的任務,并且一個任務可以擁有多個實例(但前提是位于返回棧頂部的 Activity 并不是 Activity 的現有實例)。
例:
- (1) ActivityA以singleTop模式啟動ActivityB,然后ActivityB再以singleTop模式啟動ActivityB。
- (2) 任務棧中有兩個Activity,分別是ActivityB和ActivityA;下面從ActivityB再次以singleTop模式啟動ActivityB。
- (3) 任務棧中依舊是ActivityB和ActivityA,這就是singleTop模式的作用,棧頂復用,因為ActivityB啟動ActivityB時,ActivityB已經位于棧頂,那么就會直接使用ActivityB,而不是直接創(chuàng)建。
singleTask啟動模式
- 系統創(chuàng)建新任務并實例化位于新任務底部的 Activity。但是,如果該 Activity 的一個實例已存在于一個單獨的任務中,則系統會通過調用現有實例的 onNewIntent() 方法向其傳送 Intent,而不是創(chuàng)建新實例
- 一次只能存在 Activity 的一個實例
- 盡管 Activity 在新任務中啟動,但是用戶按“返回”按鈕仍會返回到前一個 Activity。
singleInstance啟動模式
- 與 “singleTask” 相同,只是系統不會將任何其他 Activity 啟動到包含實例的任務中,該 Activity 始終是其任務唯一僅有的成員;
- Activity 啟動的任何 Activity 均在單獨的任務中打開