Activity的四種啓動模式

Activity的四種lunchmode模式,lunchmode在activity中扮演着重要的部分,它可以決定是否生成新的Activity實例,是否重用已存在的Activity實例,是否和其他Activity實例公用一個task裏。這裏簡單介紹一下task的概念,task是一個具有棧結構的對象,一個task可以管理多個Activity,啓動一個應用,也就創建一個與之對應的task。

Activity一共有以下四種launchMode:

1.standard
2.singleTop
3.singleTask
4.singleInstance

在manifest.xml文件中,我們可以爲Activity指定launchMode
如下:

<activity
android:name=".AMainActivity"
android:label="@string/app_name"
android:launchMode="standard"
>
 <intent-filter>
 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.LAUNCHER" />  </intent-filter>
 </activity>

一、standard

這個是系統的默認的啓動模式,說的簡單點,我們在使用startActivity()方法的時候,系統就會啓動一個新的Activity實例,不管它先前啓動沒有。

點擊standard.
這裏寫圖片描述

二、singleTop

如果當前要創建的Activity就在任務棧的頂端,那麼不會創建新的Activity,僅僅調用Activity的onNewIntent,如果不在棧頂(或者棧中沒有該Activity),那麼還是會創建新的Activity。

點擊兩次B singleTop
這裏寫圖片描述

三、singleTask

如果已經有其他的Task並且包含Activity實例,那就直接調用那個Task的實例。(只有一個Task中會有) 而不是創建一個新的實例。重點:假如你啓動一個singleTask的Activity,同時這個Activity在background task中,那麼整個background task都會被調入到前臺來。下面這幅圖就很好的說明這個問題。

點擊A singleTask
這裏寫圖片描述

四、SingleInstance

如果前臺Activity啓動後臺任務的Activity,如果後臺任務棧中已經有該Activity,那麼就會調用該Activity的onNewIntent,並且後臺任務還是在後臺。如果後臺任務棧中沒有該Activity,那麼會重新創建一個Acitivyt,並單獨放入一個任務棧,其實在啓動該Acitivity的Intent中也會加入上述標記

這裏寫圖片描述

整體下來就是這樣子的,下次講onNewInent()的調用機制

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章