Android的4種加載模式:
首先在配置Activity時便可指定該Activity用哪一種加載模式,通過android:launchMode屬性。
4種加載模式:
standard:標準模式,默許
singleTop:Task頂單例模式
singleTask:Task內單例模式
singleInstance:全局單例模式
Android是通過Task對Activity進行管理的,通過getTaskID()方法可以取得當前活動的Task的ID。
可以把Task理解成Activity棧,Task以棧的情勢來管理Activity。
下面是4種模式:
1.standard模式
每次通過這類模式來啟動目標Activity時,Android會為目標Activity創(chuàng)建1個新的實例,并將干Activity添加到當前Task棧中----這類模式不會啟動新的Task,新Activity將被添加到原本的Task中。
屢次點擊按鈕,程序會不斷的啟動當前活動,活動的hashCode變化,但是TaskId總是1樣的,這就表明這類加載模式不會啟動新的Task。
當按返回鍵的時候,啟動的活動會逐1從棧頂刪除。
2.singleTop
這類模式與標準模式基本相似,但是有1點不同:當將要被啟動的目標Activity已位于棧頂時,系統(tǒng)不會重新創(chuàng)建目標Activity實例,而是直接復用已有的Activity實例。
將上例中的launchmode改成singleTop,不管用戶點擊多少次按鈕,界面上的程序不會有任何變化。
如果說要被啟動的目標Activity沒有位于Task棧頂,此時系統(tǒng)會重新創(chuàng)建目標Activity實例,并將它加載到Task的棧頂----此時與標準模式完全相同。
3.singleTask
采取這類加載模式的Activity在同1個Task內只有1個實例,啟用目標Activity時,有下面3種情況:
1.如果將要啟動的活動不存在,則創(chuàng)建,放入棧頂
2.如果目標Activity已存在于棧頂,則與singleTop1樣
3.如果目標Activity已存在,但是否是位于棧頂,系統(tǒng)會將目標活動前的活動移出Task棧,使得目標Activity位于棧頂
演示說明第3種情況:
程序中有兩個活動,活動中都有1個TextView和1個Button,TextView用來顯示活動的hashCode和TaskID,Button用來啟動不同的活動。
當按下第1個活動中的按鈕時會啟動第2個活動,當按下第2個活動中的按鈕的時候會啟動第1個活動。
1表示活動1和它的加載模式
2表示活動2和它的加載模式
這就是運行截圖與示意圖。
首先先創(chuàng)建并啟動的是1,再創(chuàng)建啟動2,再創(chuàng)建啟動1,再啟動2,已有2了,不會創(chuàng)建,所以便把2之前的1移出棧,使得2位于棧頂。
如果在接著啟動1的話,這個1會再進行創(chuàng)建,已不是原來的活動1了。
應當可以充分的說明上述第3種情況。
4.singleInstance
再這類加載模式下,系統(tǒng)保證不管從哪一個Task中啟動目標活動,只會創(chuàng)建1個目標活動實例,并會使用1個全新的Task棧來裝載該活動實例
當系統(tǒng)采取該模式啟動目標活動的時候,有以下兩種情況:
1.如果將要啟動的活動不存在,則先創(chuàng)建1個Task,再創(chuàng)建目標活動,加入棧頂
2.如果目標活動已存在,不管它在哪一個利用程序中,不管在哪一個Task中,系統(tǒng)會把還Activity所在的Task棧轉到前臺,從而使用該Activity顯示出來
采取singleInstance加載模式加載Activity總是位于Task棧頂,由于Task棧中只有1個Activity。
將上例中的兩個活動的加載模式都改成singleInstance。
上一篇 CCGLProgram簡單配置及應用(cocos2dx-lua-v2.2.5)
下一篇 configure: error: cannot compute suffix of object files: cannot compile