添加Intent.FLAG_ACTIVITY_CLEAR_TOP 都做了些什么

背景

最近老是看到各種面試中的lanchMode和Intent Flag, 大多數(shù)分析停留在表面, 并且有些還自相矛盾烙丛。lz 最近
做一個需求需要用Intent flag, 查閱了下相關(guān)資料, 并從源碼論證了原因锻梳。添加Intent.FLAG_ACTIVITY_CLEAR_TOP我們來看看系統(tǒng)是怎么做的抖棘? 別問我怎么找到源碼的茂腥,我不告訴你是通過androidxref查找的。

整體流程

private int startActivityUnchecked 整體的邏輯就在這個函數(shù)中了切省,邏輯也比較清楚最岗,

  1. setInitialState(r, options, inTask, doResume, startFlags, sourceRecord, voiceSession, voiceInteractor);
    初始化lauchMode和Intent Flags

  2. computeLaunchingTaskFlags();

  3. computeSourceStack();

  4. mReusedActivity = getReusableIntentActivity(); 查找可復(fù)用的activity

  5. 特殊Flag處理如本文的 FLAG_ACTIVITY_CLEAR_TOP

 private int startActivityUnchecked(final ActivityRecord r, ActivityRecord sourceRecord,
1025            IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
1026            int startFlags, boolean doResume, ActivityOptions options, TaskRecord inTask) {
1027
1028        setInitialState(r, options, inTask, doResume, startFlags, sourceRecord, voiceSession,
1029                voiceInteractor);
1030
1031        computeLaunchingTaskFlags();
1032
1033        computeSourceStack();
1034
1035        mIntent.setFlags(mLaunchFlags);
1036
1037        mReusedActivity = getReusableIntentActivity();
1038
1039        final int preferredLaunchStackId =
1040                (mOptions != null) ? mOptions.getLaunchStackId() : INVALID_STACK_ID;
1041
1042        if (mReusedActivity != null) {
                       ......
1066            if ((mLaunchFlags & FLAG_ACTIVITY_CLEAR_TOP) != 0
1067                    || mLaunchSingleInstance || mLaunchSingleTask) {
1068                // In this situation we want to remove all activities from the task up to the one
1069                // being started. In most cases this means we are resetting the task to its initial
1070                // state.
1071                final ActivityRecord top = mReusedActivity.task.performClearTaskForReuseLocked(
1072                        mStartActivity, mLaunchFlags);
1073                if (top != null) {
1074                    if (top.frontOfTask) {
1075                        // Activity aliases may mean we use different intents for the top activity,
1076                        // so make sure the task now has the identity of the new intent.
1077                        top.task.setIntent(mStartActivity);
1078                    }
1079                    ActivityStack.logStartActivity(AM_NEW_INTENT, mStartActivity, top.task);
1080                    top.deliverNewIntentLocked(mCallingUid, mStartActivity.intent,
1081                            mStartActivity.launchedFromPackage);
1082                }
1083            }
1084
 .......  //中間為嘛省略呢? 與我們主題討論的Intent.FLAG_ACTIVITY_CLEAR_TOP 相關(guān)度不大朝捆,其他的flag處理
1250    }

直接到第4步

image.png

注釋很詳細(xì)般渡,不多說了,處理lanchMode和flag

第5步 處理FLAG_ACTIVITY_CLEAR_TOP

image.png

主要是查找到對應(yīng)的activity記錄芙盘,從后往前遍歷驯用,模擬棧操作,然后找到目標(biāo)activity儒老, 將該activity棧頂?shù)腶ctivity finish掉蝴乔。 最后處理Activity, 如果不含有singletop 的intent flag 就finish掉該activity驮樊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末薇正,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子囚衔,更是在濱河造成了極大的恐慌挖腰,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件练湿,死亡現(xiàn)場離奇詭異猴仑,居然都是意外死亡,警方通過查閱死者的電腦和手機鞠鲜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門宁脊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贤姆,你說我怎么就攤上這事榆苞。” “怎么了霞捡?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵坐漏,是天一觀的道長。 經(jīng)常有香客問我,道長赊琳,這世上最難降的妖魔是什么街夭? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮躏筏,結(jié)果婚禮上板丽,老公的妹妹穿的比我還像新娘。我一直安慰自己趁尼,他們只是感情好埃碱,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酥泞,像睡著了一般砚殿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芝囤,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天似炎,我揣著相機與錄音,去河邊找鬼悯姊。 笑死羡藐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挠轴。 我是一名探鬼主播传睹,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼耳幢,長吁一口氣:“原來是場噩夢啊……” “哼岸晦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起睛藻,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤启上,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后店印,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冈在,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年按摘,在試婚紗的時候發(fā)現(xiàn)自己被綠了包券。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡炫贤,死狀恐怖溅固,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情兰珍,我是刑警寧澤侍郭,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響亮元,放射性物質(zhì)發(fā)生泄漏猛计。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一爆捞、第九天 我趴在偏房一處隱蔽的房頂上張望奉瘤。 院中可真熱鬧,春花似錦煮甥、人聲如沸毛好。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肌访。三九已至,卻和暖如春艇劫,著一層夾襖步出監(jiān)牢的瞬間吼驶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工店煞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蟹演,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓顷蟀,卻偏偏與公主長得像酒请,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鸣个,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容