036android初級篇之Activity的啟動模式

task容器任務(wù)棧

  1. 當用戶點擊某個應(yīng)用程序圖標打開一個應(yīng)用時,那么這個任務(wù)就處于前端。如果這個應(yīng)用程序之前未被打開過,就會創(chuàng)建一個新的任務(wù)Task。
  2. Task是一個Activities的收集器,專門收集用戶操作交互所打開的Activity。這些Activities都被安排在一個回收棧back stack中,安排的順序和它們打開的順序一致。即先打開的安排在最底部,最后一個打開的安排在頂部。

運行模式介紹

你可以通過定義運行模式來定義Activities如何與Task進行交互。定義的兩種方式如下:

  1. 使用manifest配置文件
  2. 使用intent的標識

例子:Activity A 啟動 Activity B。如果B在manifest中定義了運行模式,并且A在啟動B時,也在Intent中指定了B的運行模式,那么A在Intent的定義將覆蓋B在manifest中的定義。

注:有些運行模式在manifest中定義有效未必在Intent中也有效,同樣,在Intent定義有效的運行模式在manifest中未必生效。

Activity的launchMode屬性來指定4中不同的運行模式

Standard:標準默認模式

在這種默認模式下,Activity可以被多次實例化,也可以運行在多個Task中,一個Task可以擁有多個Activity實例。

singleTop

在這種模式下,如果一個Activity實例已經(jīng)存在于當前Task的最頂部,那么系統(tǒng)將調(diào)用onNewIntent()方法路由到這個實例,而不是創(chuàng)建一個新的Activity實例。

一個Activity可以被實例化多次,且可以從屬于不同的Task任務(wù),且一個任務(wù)中可以存在多個Activity實例(這情況僅僅存在于Activity實例不在Task任務(wù)的頂端)。

A-B-C-D:再開啟D,back stack中的情形:
在標準模式下,則為 A-B-C-D-D
在singleTop模式,則為A-B-C-D
如果開啟B
則在singleTop模式下為 A-B-C-D-B

singTask

這種模式下,系統(tǒng)創(chuàng)建一個新的Task,并在Task的底部實例化Activities。然而,當一個實例存在于一個獨立的Task時,系統(tǒng)不是去創(chuàng)建一個新的實例,而是調(diào)用onNewIntent()路由到其他任務(wù)的實例。在同一時間,只存在一個Activity實例。

singInstance

于singTask相似,唯獨一點不同的是,這個實例只能在一個單獨的Task中使用。

如何使用Intent配置管理

在啟動Activity時,你可以通過傳遞一個Intent入?yún)⒔ostartActivity()方法,來實現(xiàn)與manifest配置類似功能,改變Activity在task中的行為。

  1. FLAG_ACTIVITY_NEW_TASK
    和 singleTask 一樣

  2. FLAG_ACTIVITY_SINGLE_TOP
    和singleTop一樣

  3. FLAG_ACTIVITY_CLEAR_TOP
    這個模式是沒有屬性配置支持的。在這種模式下,如果啟動一個已經(jīng)存在于當前Task任務(wù)的Activity,那么Task頂部所有的Activity將被銷毀,并且為將要啟動的Activity新建一個Activity實例,存放在task的back stack的頂部。

  4. FLAG_ACTIVITY_CLEAR_TOP通常與FLAG_ACTIVITY_NEW_TASK一起結(jié)合使用,
    結(jié)合使用可以達到這樣的效果:找到在其他Task中存在的Activity,并將它放置到一個可以相應(yīng)Intent的地方。如果是standard模式,那么它將從stack移除,并新建一個Activity去相應(yīng)Intent,因為這種模式下,總是新建Activity。

參考鏈接

  1. Activity的啟動模式
  2. Android 開發(fā)指南(一) 任務(wù)Task及回收棧back stack介紹
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容