覺得都是一些比較重要的東西雳锋,以后面試有可能會(huì)用得上。所以魄缚,先一條條歸納下來吧冶匹。
1. ask: LaunchMode 的應(yīng)用場(chǎng)景
answer:? ?
? ? 1> android:launchMode="standard"。
? ? 可以存在多個(gè)實(shí)例嚼隘。這是默認(rèn)的啟動(dòng)模式飞蛹,系統(tǒng)總是會(huì)在目標(biāo)棧中啟動(dòng)新的activity實(shí)例灸眼。
? ? 2> android:launchMode="singleTop"
? ? 如果這個(gè)activity實(shí)例已經(jīng)存在目標(biāo)棧的棧頂,系統(tǒng)會(huì)調(diào)用這個(gè)activity中的 onNewIntent() 方法焰宣,并傳遞intent,而不會(huì)創(chuàng)建新的activity實(shí)例;如果不存在這個(gè)activity實(shí)例或者activity實(shí)例不在棧頂盈罐,則singleTop模式跟standard是一樣的闪唆。
? ?3>?android:launchMode="singleTask"
? ? 不會(huì)存在多個(gè)實(shí)例悄蕾,如果棧中不存在activity實(shí)例,系統(tǒng)會(huì)在新棧的根部創(chuàng)建一個(gè)新的activity库物;如果這個(gè)activity實(shí)例已經(jīng)存在贷帮,系統(tǒng)會(huì)調(diào)用這個(gè)activity實(shí)例的 onNewIntent() 而不會(huì)創(chuàng)建新的activity實(shí)例撵枢。
? ?4> android:launchMode="singleInstance"
? ? 這個(gè)啟動(dòng)模式比較特殊精居,因?yàn)樗鼤?huì)啟動(dòng)一個(gè)新的棧結(jié)構(gòu)靴姿,將activity放置于這個(gè)新的棧結(jié)構(gòu)中磁滚,并保證不再有其他的activity實(shí)例進(jìn)入垂攘。除此之外维雇,singleinstance和singletask模式是一樣的。
接下來說一下各個(gè)地方的應(yīng)用場(chǎng)景
Standard:
Standard 模式是系統(tǒng)默認(rèn)的啟動(dòng)模式晒他,一般我們 app 中大部分頁面都是由該模式的頁面構(gòu)成的吱型,比較常見的場(chǎng)景是:社交應(yīng)用中,點(diǎn)擊查看用戶A信息->查看用戶A粉絲->在粉絲中挑選查看用戶B信息->查看用戶A粉絲... 這種情況下一般我們需要保留用戶操作 Activity 棧的頁面所有執(zhí)行順序陨仅。
SingleTop:
SingleTop 模式一般常見于社交應(yīng)用中的通知欄行為功能津滞,例如:App 用戶收到幾條好友請(qǐng)求的推送消息,需要用戶點(diǎn)擊推送通知進(jìn)入到請(qǐng)求者個(gè)人信息頁灼伤,將信息頁設(shè)置為 SingleTop 模式就可以增強(qiáng)復(fù)用性触徐。
SingleTask:
SingleTask 模式一般用作應(yīng)用的首頁,例如瀏覽器主頁狐赡,用戶可能從多個(gè)應(yīng)用啟動(dòng)瀏覽器锌介,但主界面僅僅啟動(dòng)一次,其余情況都會(huì)走onNewIntent猾警,并且會(huì)清空主界面上面的其他頁面。
SingleInstance:
SingleInstance 模式常應(yīng)用于獨(dú)立棧操作的應(yīng)用隆敢,如鬧鐘的提醒頁面穴墅,當(dāng)你在A應(yīng)用中看視頻時(shí)玄货,鬧鐘響了,你點(diǎn)擊鬧鐘提醒通知后進(jìn)入提醒詳情頁面隘世,然后點(diǎn)擊返回就再次回到A的視頻頁面复斥,這樣就不會(huì)過多干擾到用戶先前的操作了目锭。