1. 程式人生 > >在Android Studio 中 activity的四中啟動模式

在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/itluochen/article/details/52599083

                  http://blog.csdn.net/shinay/article/details/7898492?locationNum=11&fps=1