Activity 生命週期和棧(Task)的關係及Intent 常用的Flags

bitDay發表於2013-01-09

一、Activity的生命週期

3ActivityAB

 第一次建立A(正常):onCreate()>>onStart()>>onResume()

       結束AonPause()>>onStop()>>onDestory()

有覆蓋半透明B:onPause() 恢復A:onResume();

有覆蓋A不可見:onPause()>>onStop()  恢復AonRestart()>>onStart()>>onResume()

結束Activity有兩種方式:

   1finish()

   2、系統自動回收:在記憶體不足時優先順序更高的Activity要執行,則系統會回收之前的一個Activity,使用者重新選擇被回收的Activity時,又重新執行一次onCreate()方法


二、

1.Activity和棧的關係


2.Activity的啟動模式:(黃色部分)

<activity android:name=".MainActivity" android:launchMode="standard" />

Standard:每次啟用Activity時都會建立Activity,並放入任務棧中。

SingleTop:如果Activity例項正好在棧頂, 就重用這個Activity,否者就會建立新的例項並放入棧頂(即使棧中已經存在該Activity例項,只要不在棧頂,都會建立例項)

SingleTask:如果在棧中已經有該Activity的例項,就重用該例項(會呼叫例項的onNewIntent())。重用時,會讓該例項回到棧頂,因此在它上面的例項將會被移除棧。如果棧中不存在該例項,將會建立新的例項放入棧中。

SingleInstance:在一個新棧中建立該Activity例項,並讓多個應用共享改棧中的該Activity例項。一旦改模式的Activity的例項存在於某個棧中,任何應用再啟用改Activity時都會重用該棧中的例項,其效果相當於多個應用程式共享一個應用,不管誰啟用該Activity都會進入同一個應用中。

三、經常用到的Intent.Flags

FLAG_ACTIVITY_NEW_TASK:預設,會重新建立新的Activity

FLAG_ACTIVITY_SINGLE_TOP:相當於啟動模式的singleTop,比如:棧中有:ABCD四個Activity。如果在D中啟動D,棧的情況還是ABCD。

FLAG_ACTIVITY_CLEAR_TOP:相當於啟動模式的singleTask,比如:棧中有:ABCD四個Activity。如果在D中啟動B,則棧成AB

FLAG_ACTIVITY_NO_HISTORY:表示不留在棧裡

FLAG_ACTIVITY_REORDER_TO_FRONT:比如:棧中有:ABCD四個Activity。如果在D中啟動B,則棧成ACDB






相關文章