在Android Studio 中 activity的四中啟動模式
Android Studio 在實際開發中,根據需求為每個Activity指定恰當的啟動方式。從而可以避免一些問題
Activity的啟動方式:
·standard
·singleTop
·singleTask
·singleInstance
設定activity的啟動模式,只需要在AndroidManifest.xml裡對應的<activity>標籤設定Android:launchMode屬性,例如:
<activity android:name=".A1" android:launchMode="standard" />
·standard
標準啟動模式,也是預設啟動模式,如果不設定android:launchMode屬性的話。standard模式下的Activity會依照啟動的順序壓入Task Stack中。
下面是activity壓棧和會退的示意圖:
·singleTop
頂部單例模式,可以有多個例項,但是不允許多個相同Activity疊加。即,如果Activity在棧頂的時候,啟動相同的Activity,不會建立新的例項,而會呼叫其onNewIntent方法。
下面是singleTop模式下的示意圖:
·singleTask
當Activity不存在,則會在當前task建立一個新的例項,若存在,則會把task中在其之上的其它Activity
destory掉並呼叫它的onNewIntent方法。
如果是在別的應用程式中啟動它,則會新建一個task,並在該task中啟動這個Activity,singleTask允許別的Activity與其在一個task中共存,也就是說,如果我在這個singleTask的例項中再開啟新的Activity,這個新的Activity還是會在singleTask的例項的task中。
下圖:
·singleInstance
只有一個例項,並且這個例項獨立執行在一個task中,這個task只有這個例項,不允許有別的Activity存在。這是一個極端的模式。
singleInstance一般適用於需要在系統中只存在一個例項的場景,比如Android系統的來電頁面,多次來電均使用的是一個Activity。
下圖:
當然,在Android中,除了在AndroidManifest.xml清單檔案中配置LauncherMode屬性外,還可以在程式碼中設定啟動模式。在元件中,啟動一個Activity,需要用到startActivity()方法,其中傳遞一個Intent,可以使用Intent.setFlags(int flags)來設定新啟動的Activity的啟動模式,而通過程式碼設定Activity的啟動模式的方式,優先順序要高於在AndroidManifest.xml清單檔案中的配置。
Intent.setFlag(int flags)方法傳遞的一個整形的資料,被Android系統設定為了常量:
- FLAG_ACTIVITY_NEW_TASK:這個標識會使新啟動的Activity獨立建立一個Task。
- FLAG_ACTIVITY_CLEAR_TOP:這個標識會使新啟動的Activity檢查是否存在於Task中,如果存在則清除其之上的Activity,使它獲得焦點,並不重新例項化一個Activity,一般結合FLAG_ACTIVITY_NEW_TASK一起使用。
- FLAG_ACTIVITY_SINGLE_TOP:等同於在LauncherMode屬性設定為singleTop。
http://blog.csdn.net/shinay/article/details/7898492?locationNum=11&fps=1