區分Activity的四種launchMode加載模式

轉至 http://marshal.easymorse.com/archives/2950 Activity有四種加載模式 standard(默認模式) singleTop singleTask singleInstance 設置的位置在AndroidManifest.xml文件中activity元素的android:launchMode屬性:         <activity android:name="ActB" android:launchMode="singleTask"></activity> standard:         每次都建立了該Activity的新實例。standard的加載模式就是這樣的,intent將發送給新的實例 singleTop         singleTop和standard模式,都會將intent發送新的實例。不過,singleTop要求若是建立intent的時候棧頂已經有要建立的Activity的實例,則將intent發送給該實例,而不發送給新的實例。 當已經存在的activity實例處理新的intent時候,會調用onNewIntent()方法  singleTask         singleTask模式和後面的singleInstance模式都是隻建立一個實例的。當intent到來,須要建立singleTask模式Activity的時候,系統會檢查棧裏面是否已經有該Activity的實 例。若是有直接將intent發送給它。 當已經存在的activity實例處理新的intent時候,會調用onNewIntent()方法  singleTask若是爲啓動頁,在任意頁點擊home,返回桌面後點擊應用會銷燬上層Activity, 若是第二次打開singleTask,在singleTask上層的activity都會銷燬 若是A應用中的singleTask已打開,B應用打開singleTask會調用onNewIntent並銷燬上層Activity,點擊返回會返回singleTask的下層activity,當下層activity所有銷燬後纔會 返回B應用 singleTask若是隻在本應用中使用那麼,TaskId固定。 singleInstance         這個模式下的Activity單獨在一個task棧中。這個棧只有一個Activity。 singleInstance沒次啓動都會在一個新的Task中,與默認的應用的TaskId不一樣 第二次打開singleInstance,會啓動onNewIntent而且將本activity移動到最上 若是A=>B(singleInstance)=>C A執行了finish()後A、C的TaskId不一樣 若是singleInstance已打開,另外一個應用打開singleInstance會調用onNewIntent,點擊返回會銷燬activity,當前應用中也會找不到activity。 此時Task棧1的狀況仍是爲:A B C。Task棧2的狀況爲:D。此時屏幕界面顯示D的內容,若是這時D又經過Intent跳轉到D,則Task棧2中也不會新建一個D的實例,因此 兩個棧的狀況也不會變化。而若是D跳轉到C,則棧1的狀況變成了:A B C C,由於C的Launch mode爲standard,此時若是再按返回鍵,則棧1變成:A B C。也就是說現 在界面還顯示C的內容,不是D。
相關文章
相關標籤/搜索