1. 程式人生 > >onNewIntent呼叫時機及Activity的四種啟動模式

onNewIntent呼叫時機及Activity的四種啟動模式

singleInstance:
第一次進入:onCreate onStart
在棧頂再次進入: onNewIntent
不在棧頂再次進入:onNewIntent onRestart onStart
按home鍵再次進入:onRestart onStart

按返回鍵:onRestart onStart

standard:
第一次進入:onCreate onStart
在棧頂再次進入: onCreate onStart
不在棧頂再次進入:onCreate onStart
按home鍵再次進入:onRestart onStart
按返回鍵:onRestart onStart

singleTop:
第一次進入:onCreate onStart

在棧頂再次進入:onNewIntent
不在棧頂再次進入:onCreate onStart
按home鍵再次進入:onRestart onStart
按返回鍵:onRestart onStart

singleTask:
第一次進入:onCreate onStart
在棧頂再次進入:onNewIntent
不在棧頂再次進入:onNewIntent onRestart onStart
按home鍵再次進入:onRestart onStart

按返回鍵:onRestart onStart

Activity的四種啟動模式:  
    1. standard  
        預設啟動模式,每次啟用Activity時都會建立Activity,並放入任務棧中,永遠不會呼叫onNewIntent()。  
    2. singleTop  
        如果在任務的棧頂正好存在該Activity的例項, 就重用該例項,並呼叫其onNewIntent(),否者就會建立新的例項並放入棧頂(即使棧中已經存在該Activity例項,只要不在棧頂,都會建立例項,而不會呼叫onNewIntent(),此時就跟standard模式一樣)。  
    3. singleTask  
        如果在棧中已經有該Activity的例項,就重用該例項(會呼叫例項的onNewIntent())。重用時,會讓該例項回到棧頂,因此在它上面的例項將會被移除棧。如果棧中不存在該例項,將會建立新的例項放入棧中(此時不會呼叫onNewIntent())。   
    4. singleInstance  
        在一個新棧中建立該Activity例項,並讓多個應用共享改棧中的該Activity例項。一旦改模式的Activity的例項存在於某個棧中,任何應用再啟用改Activity時都會重用該棧中的例項,其效果相當於多個應用程式共享一個應用,不管誰啟用該Activity都會進入同一個應用中。  

當呼叫到onNewIntent(intent)的時候,需要在onNewIntent() 中使用setIntent(intent)賦值給Activity的Intent.否則,後續的getIntent()都是得到老的Intent。