1俯画、Standard(標(biāo)準(zhǔn)模式)
? ? 每次啟動(dòng)Activity的時(shí)候都會(huì)重新創(chuàng)建一個(gè)新的實(shí)例并加入到任務(wù)棧中,生命周期的調(diào)用與啟動(dòng)時(shí)一致泡仗。
2猜憎、SingleTop(棧頂復(fù)用模式)
? ? 每次啟動(dòng)Activity的時(shí)候都會(huì)判斷任務(wù)棧的棧頂是否存在該Activity實(shí)例,如果存在則直接復(fù)用該Activity拉宗,否則創(chuàng)建新的Activity實(shí)例旦事。
????PS:當(dāng)產(chǎn)生Activity復(fù)用時(shí),onNewIntent()會(huì)被回調(diào)谷遂,通過(guò)此方法可以獲取當(dāng)前請(qǐng)求的信息肾扰;Activity復(fù)用時(shí)生命周期的oncreate和onStart不會(huì)被調(diào)用,因?yàn)闆](méi)有被重新創(chuàng)建集晚。
3、SingleTask(棧內(nèi)復(fù)用模式)
? ? 每次啟動(dòng)Activity的時(shí)候都會(huì)該任務(wù)棧中是否存在該Activity實(shí)例蒋院,如果存在則把該Activity實(shí)例調(diào)到棧頂欺旧,且該實(shí)例上的其它Activity實(shí)例會(huì)依次出棧蛤签,否則重新創(chuàng)建震肮。
????PS:具體的創(chuàng)建過(guò)程:
? ? 首先系統(tǒng)會(huì)判斷創(chuàng)建Activity的目標(biāo)任務(wù)棧是否存在,如果不存在則創(chuàng)建新的任務(wù)棧茵瀑,創(chuàng)建新的Activity實(shí)例并壓入棧中;如果目標(biāo)任務(wù)棧已經(jīng)存在竞帽,則判斷任務(wù)棧中是否存在該Activity的實(shí)例,如果存在則把該Activity實(shí)例調(diào)到棧頂并回調(diào)onNewIntent()方法疙渣,如果不存在則創(chuàng)建新的實(shí)例并壓入棧中堆巧。
4谍肤、SingleInstance(單實(shí)例模式)
? ? 每次啟動(dòng)Activity時(shí)都會(huì)判斷所有的任務(wù)棧中是否存在該Activity實(shí)例,如果存在則直接復(fù)用篷角,否則創(chuàng)建新的實(shí)例系任。
PS:SingleInstance和SingleTask的區(qū)別:SingleTask允許存在多個(gè)實(shí)例,只要保證這些實(shí)例對(duì)象不在同一個(gè)任務(wù)棧中就行嘉蕾;而SingleInstance只允許系統(tǒng)存在一個(gè)實(shí)例對(duì)象。
補(bǔ)充:
Android中的任務(wù)棧:Android系統(tǒng)可以通過(guò)任務(wù)棧有序地管理每個(gè)Activity儡率。退出應(yīng)用程序時(shí)必須保證任務(wù)棧被清空喉悴,才能處于數(shù)據(jù)最安全的狀態(tài)。任務(wù)棧不是唯一的玖媚。