Activity的加載模式解讀

Android是用launchMode屬性來定義activity的加載模式的,如在AndroidManifest裏面寫:
<activity android:name=".Activity2" android:launchMode="singleInstance">
加載模式一共四種,下面分別介紹:

standard:就是intent將發送給新的實例,所以每次跳轉都會生成新的Activity。


singleTop:也是發送給新的實例,但不同於standard的一點是,請求的Activity正好位於棧頂時,不會構造新的實例,這時會執行onNewIntent()方法,所以生命週期變化爲:onPause()-->onNewIntent()-->onResume()。可以這樣記:top single---如果在棧頂,就使用這一個。


singleTask:和後面的singleInstance都只創建一個實例,當intent到來,系統會檢查棧裏面是否已經有該Activity的實例,如果有直接將intent發送給它,並使此Activity實例之上的其他Activity實例統統出棧,沒有的話纔會新建。可以這樣記:task single---如果棧裏面有,就使用這一個。
需要說明的是:如果棧裏面已經有Activity的實例了,當intent到來時,會在onStart()之前調用onNewIntent()方法。
Android中有一個屬性android:taskAffinity,是用來給Application或Activity設置“任務共用性”的,默認是包名。如果爲一個singleTask模式的Activity設置了該屬性,如:android:taskAffinity="com.example.demo.interviewtwo.aa"那麼這個Activity跟該應用的其他Activity就不在同一個task(棧)了,可以使用this.getTaskId()打印出來看一下就清楚了。

singleInstance:將Activity放入一個棧中,並且這個棧中有且只有這一個Activity,不同應用的intent都由這個Activity接收和展示,實際就是不同應用共享同一個Activity,其實這種情況該Activity就相當於一個獨立的應用了,不過這個應用僅有這一個Activity而已。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章