應(yīng)用場景:
singleTop 適合接收通知啟動的內(nèi)容顯示頁面。例如披摄,某個新聞客戶端的新聞內(nèi)容頁面亲雪,如果收到10個新聞推送,每次都打開一個新聞內(nèi)容頁面是很煩人的疚膊。
singleTask 適合作為程序入口點(diǎn)义辕。例如瀏覽器的主界面。不管從多少個應(yīng)用啟動瀏覽器酿联,只會啟動主界面一次终息,其余情況都會走onNewIntent,并且會清空主界面上面的其他頁面贞让。之前打開過的頁面,打開之前的頁面就ok柳譬,不再新建喳张。
singleInstance 適合需要與程序分離開的頁面。例如鬧鈴提醒美澳,將鬧鈴提醒與鬧鈴設(shè)置分離销部。singleInstance不要用于中間頁面摸航,如果用于中間頁面,跳轉(zhuǎn)會有問題舅桩,比如:A -> B (singleInstance) -> C酱虎,完全退出后,在此啟動擂涛,首先打開的是B读串。
任務(wù)棧是一種后進(jìn)先出的結(jié)構(gòu)。位于棧頂?shù)腁ctivity處于焦點(diǎn)狀態(tài),當(dāng)按下back按鈕的時候,棧內(nèi)的Activity會一個一個的出棧,并且調(diào)用其onDestory()方法撒妈。如果棧內(nèi)沒有Activity,那么系統(tǒng)就會回收這個棧,每個APP默認(rèn)只有一個棧,以APP的包名來命名.
1恢暖、standard : 標(biāo)準(zhǔn)模式. 每次啟動Activity都會創(chuàng)建一個新的Activity實(shí)例,并且將其壓入任務(wù)棧棧頂,而不管這個Activity是否已經(jīng)存在。Activity的啟動三回調(diào)(onCreate()->onStart()->onResume())都會執(zhí)行(默認(rèn))狰右。
2杰捂、singleTop : 棧頂復(fù)用模式. 這種模式下,如果新Activity已經(jīng)位于任務(wù)棧的棧頂,那么此Activity不會被重新創(chuàng)建,所以它的啟動三回調(diào)就不會執(zhí)行,同時Activity的onNewIntent()方法會被回調(diào).如果Activity已經(jīng)存在但是不在棧頂,那么作用于standard模式一樣。
3棋蚌、singleTask: 棧內(nèi)復(fù)用模式. 創(chuàng)建這樣的Activity的時候,系統(tǒng)會先確認(rèn)它所需任務(wù)棧已經(jīng)創(chuàng)建,否則先創(chuàng)建任務(wù)棧.然后放入Activity,如果棧中已經(jīng)有一個Activity實(shí)例,那么這個Activity就會被調(diào)到棧頂,onNewIntent(),并且singleTask會清理在當(dāng)前Activity上面的所有Activity.(clear top)嫁佳。
4、singleInstance : 加強(qiáng)版的singleTask模式, 這種模式的Activity只能單獨(dú)位于一個任務(wù)棧內(nèi),由于棧內(nèi)復(fù)用的特性,后續(xù)請求均不會創(chuàng)建新的Activity,除非這個獨(dú)特的任務(wù)棧被系統(tǒng)銷毀了谷暮。
獲取棧的ID:this.getTaskId()
作者:濤濤123759
鏈接:http://www.reibang.com/p/4614b8a3501f
來源:簡書
簡書著作權(quán)歸作者所有脱拼,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。