標籤:
轉自 http://blog.csdn.net/linghu_java/article/details/17266603
在Android中每個介面都是一個Activity,切換介面操作其實是多個不同Activity之間的執行個體化操作。在Android中Activity的啟動模式決定了Activity的啟動運行方式。
Android總Activity的啟動模式分為四種:
Activity啟動模式設定: <activity android:name=".MainActivity" android:launchMode="standard" />Activity的四種啟動模式: 1. standard 預設啟動模式,每次啟用Activity時都會建立Activity,並放入任務棧中。 2. singleTop 如果在任務的棧頂正好存在該Activity的執行個體, 就重用該執行個體,否者就會建立新的執行個體並放入棧頂(即使棧中已經存在該Activity執行個體,只要不在棧頂,都會建立執行個體)。 3. singleTask 如果在棧中已經有該Activity的執行個體,就重用該執行個體(會調用執行個體的onNewIntent())。重用時,會讓該執行個體回到棧頂,因此在它上面的執行個體將會被移除棧。如果棧中不存在該執行個體,將會建立新的執行個體放入棧中。 4. singleInstance 在一個新棧中建立該Activity執行個體,並讓多個應用共用改棧中的該Activity執行個體。一旦改模式的Activity的執行個體存在於某個棧中,任何應用再啟用改Activity時都會重用該棧中的執行個體,其效果相當於多個應用程式共用一個應用,不管誰啟用該Activity都會進入同一個應用中。
大家遇到一個應用的Activity供多種方式調用啟動的情況,多個調用希望只有一個Activity的執行個體存在,這就需要Activity的onNewIntent(Intent intent)方法了。只要在Activity中加入自己的onNewIntent(intent)的實現加上Manifest中對Activity設定lanuchMode=“singleTask”就可以。
onNewIntent()非常好用,Activity第一啟動的時候執行onCreate()---->onStart()---->onResume()等後續生命週期函數,也就時說第一次啟動Activity並不會執行到onNewIntent(). 而後面如果再有想啟動Activity的時候,那就是執行onNewIntent()---->onResart()------>onStart()----->onResume(). 如果android系統由於記憶體不足把已存在Activity釋放掉了,那麼再次調用的時候會重新啟動Activity即執行onCreate()---->onStart()---->onResume()等。
當調用到onNewIntent(intent)的時候,需要在onNewIntent() 中使用setIntent(intent)賦值給Activity的Intent.否則,後續的getIntent()都是得到老的Intent。
轉 Activity的四種啟動模式和onNewIntent()