Activity的四種加載模式

轉載:http://www.cnblogs.com/hibraincol/archive/2011/04/11/2012719.html

Activity的啓動模式可以通過AndroidManifest.xml文件中的<activity>元素的屬性來指定,一共有4中模式:

?
1
<activity android:name="ActivityMain" android:launchMode="singleTask"></activity>
    • standard
    • singleTop
    • singleTask
    • singleInstance 

     這4中模式又分兩類,standard和signleTop屬於一類, singleTask和signleInstance屬於另一類。

 

    standard和singleTop屬性的 Activity 的實例可以屬於任何任務(Task),並且可以位於Activity堆棧的任何位置。比較典型的一種情況是,一個任務的代碼執行startActivity(),如果傳遞的 Intent 對象沒有包含 FLAG_ACTIVITY_NEW_TASK 屬性, 指定的 Activity 將被該任務調用,從而裝入該任務的Activity 堆棧中。 standard和singleTop的區別在於:standard模式的Activity在被調用時會創建一個新的實例,所有實例處理同一個Intent對象; 但對於singleTop模式的Activity,如果被調用的任務已經有一個這樣的Activity 在堆棧的頂端,那麼不會有新的實例創建, 任務會使用當前頂端的Activity實例來處理Intent對象,換句話說,如果被調用的任務包含一個不在堆棧頂端的 singleTop Activity, 或者堆棧頂端爲 singleTop 的Activity的任務不是當前被調用的任務,那麼,仍然會有一個新的Activity對象被創建。

 

    singleTask 和 singleInstance模式的Activity 僅可用於啓動任務的情況, 這種模式的Activity總是處在Activity堆棧的最底端,並且一個任務中只能被實例化一次。兩者的區別在於:對於 singleInstance模式的Activity, 任務的Activity堆棧中如果有這樣的Activity,那它將是堆棧中的唯一的 Activity, 當前任務收到的 Intent 都由它處理, 由它開啓的其他 Activity 將在其他任務中被啓動; 對於 SingleTask模式的Activity,它在堆棧底端,其上方可以有其他Activity被創建, 但是,如果發給該Activity的Intent對象到來時該Activity不在堆棧頂端,那麼該Intent對象將被丟棄,但是界面還是會切換到當前的Activity。


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