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