通過launchMode設(shè)置的四種啟動(dòng)模式僅適用于Activity啟動(dòng)Activity,并且采用的都是默認(rèn)Intent瘫想,沒有額外添加任何Flag
Intent.FLAG_ACTIVITY_NEW_TASK:是啟動(dòng)模式中最關(guān)鍵的一個(gè)Flag
對(duì)于非Activity啟動(dòng)的Activity(比如Service或者通知中啟動(dòng)的Activity)需要顯式的設(shè)置Intent.FLAG_ACTIVITY_NEW_TASK蚊惯。singleTask和singleInstance在AMS中被預(yù)處理后侠鳄,自動(dòng)設(shè)置了Intent.FLAG_ACTIVITY_NEW_TASK异剥,standard和singleTop不會(huì)自動(dòng)設(shè)置Intent.FLAG_ACTIVITY_NEW_TASK。
Intent.FLAG_ACTIVITY_NEW_TASK這個(gè)屬性更多的關(guān)注點(diǎn)是在Task济竹,可以認(rèn)為沒有設(shè)置Intent.FLAG_ACTIVITY_NEW_TASK的情況下痕檬,taskAffinity可以不考慮,Intent.FLAG_ACTIVITY_NEW_TASK的初衷是在Activity目標(biāo)taskAffinity的Task中啟動(dòng)规辱。
如果找不到目標(biāo)Task自然會(huì)啟動(dòng)Task谆棺,如果目標(biāo)Task棧根Activity的Intent同新的將要啟動(dòng)的Activity相同,就不啟動(dòng)新Activity罕袋,否則啟動(dòng)Activity
Intent.FLAG_ACTIVITY_CLEAR_TASK:必須配合FLAG_ACTIVITY_NEW_TASK使用
如果目標(biāo)Task已存在改淑,將清空已存在的目標(biāo)Task,否則浴讯,新建一個(gè)Task朵夏,之后,新建一個(gè)Activity作為根Activity榆纽。Intent.FLAG_ACTIVITY_CLEAR_TASK的優(yōu)先級(jí)最高仰猖,基本可以無視所有的配置,包括啟動(dòng)模式及Intent Flag奈籽,哪怕是singleInstance也會(huì)被finish饥侵,并重建
Intent.FLAG_ACTIVITY_CLEAR_TOP
單獨(dú)使用Intent.FLAG_ACTIVITY_CLEAR_TOP,如果同一個(gè)棧中原來已有
如果沒有則創(chuàng)建衣屏,不會(huì)去另一個(gè)棧中尋找
如果同時(shí)設(shè)置了Intent.FLAG_ACTIVITY_SINGLE_TOP躏升,在當(dāng)前棧已有的情況下就不會(huì)重建,而是直接回調(diào)onNewIntent方法
如果同時(shí)設(shè)置了Intent.FLAG_ACTIVITY_NEW_TASK狼忱,目標(biāo)是Activity設(shè)定的Task棧膨疏,如果在這個(gè)Task中能找到一個(gè)Activity實(shí)例,則將其上面的自身處理掉钻弄,之后重建
如果同時(shí)再加上Intent.FLAG_ACTIVITY_SINGLE_TOP佃却,此時(shí)判斷topActivity(當(dāng)前最頂部Task的棧頂)是不是目標(biāo)Activity,如果不是就會(huì)去目標(biāo)Task中去找窘俺,并喚起
如果topActivity是目標(biāo)Activity饲帅,就直接回調(diào)topActivity的onNewIntent方法,無論topActivity是不是在目標(biāo)Task中
Intent.FLAG_ACTIVITY_SINGLE_TOP
同launchMode中的singleTop,這里所指的棧頂是最頂部的Task的棧頂