棧是什么?
任務(wù)棧Task,是用來(lái)放置activity的地方,即執(zhí)行特定任務(wù)時(shí)與用戶交互的一系列activity,這些activity的順序采取“先進(jìn)后出”的順序排列在堆棧中。作用:為了記錄用戶開(kāi)啟的那些activity,方便用戶進(jìn)行對(duì)activity的管理,幫助更好的維護(hù)用戶體驗(yàn)
activity的啟動(dòng)模式?
即activity啟動(dòng)時(shí)的策略,當(dāng)新啟動(dòng)一個(gè)activity時(shí),它會(huì)置于棧頂,并處于活動(dòng)狀態(tài),在AndroidManifest.xml中的標(biāo)簽的android:launchMode屬性設(shè)置,一共有4種啟動(dòng)模式,分別為standard、singleTop、singleTask、singleInstance
standard
默認(rèn)模式,不需要在AndroidManifest.xml里面配置,每次打開(kāi)新的Intent時(shí),都會(huì)創(chuàng)建新的實(shí)例,試用于絕大部分情況,因此,允許有多個(gè)相同實(shí)例存在,當(dāng)startActivity(new Intent(A.this, A.class)),這時(shí)任務(wù)棧會(huì)有兩個(gè)相同的A實(shí)例
singleTop
棧頂復(fù)用模式,這種其實(shí)和默認(rèn)standard大致一樣,只不過(guò)當(dāng)你啟動(dòng)的activity處于棧頂?shù)臅r(shí)候,那么不會(huì)生成新的實(shí)例,將調(diào)用 onNewIntent() 方法,避免棧頂?shù)腶ctivity被重復(fù)的創(chuàng)建,解決用戶體驗(yàn)問(wèn)題
singleTask
單一任務(wù)模式,activity只會(huì)在任務(wù)棧里面存在一個(gè)實(shí)例。如果要激活的activity,在任務(wù)棧里面已經(jīng)存在,就不會(huì)創(chuàng)建新activity,而是復(fù)用這個(gè)已經(jīng)存在的activity,調(diào)用 onNewIntent() 方法,并且清空當(dāng)前activity任務(wù)棧上面所有的activity,整個(gè)任務(wù)棧只有一個(gè)實(shí)例,節(jié)約內(nèi)存和cpu
singleInstance
單態(tài)單例模式,單一實(shí)例,整個(gè)手機(jī)操作系統(tǒng)里面只有一個(gè)實(shí)例存在。不同的應(yīng)用去打開(kāi)這個(gè)activity共享 公用的同一個(gè)activity。
他會(huì)運(yùn)行在自己?jiǎn)为?dú),獨(dú)立的任務(wù)棧里面,并且任務(wù)棧里面只有他一個(gè)實(shí)例存在。
應(yīng)用場(chǎng)景:呼叫來(lái)電界面 InCallScreen