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()的調用機制