先看一下這個(gè)流程
-
在確認(rèn)訂單頁(yè)中打開(kāi)支付寶支付頁(yè)面后
image.png -
從確認(rèn)訂單頁(yè)到支付寶的信用評(píng)估頁(yè)
image.png -
評(píng)估完以后回到我們自己的回到BrowserActivity
image.png -
關(guān)掉BrowserActivity回到確認(rèn)訂單頁(yè)
image.png -
退后到商詳
image.png
6.退回到首頁(yè)
打印activity棧信息的命令
adb shell
dumpsys activity activities
說(shuō)明一下
- BrowserActivity 設(shè)置了獨(dú)立進(jìn)程们拙,但是沒(méi)有設(shè)置 taskAffinity柱恤,而且他的launchMode是singleTask
- 第五步和第六步的圖新后面補(bǔ)的所以他的TaskRecod 的id或者其他信息和上面不一樣
我們從上面截圖可以發(fā)現(xiàn)
BrowserActivity雖然擁有獨(dú)立進(jìn)程但是他創(chuàng)建的時(shí)候也是在我們app的默認(rèn)TaskRecord中的
當(dāng)從支付寶信用評(píng)估完以后 BrowserActivity看似擁有了自己的TaskRecord 但是我們仔細(xì)看 他的 TaskRecord 和之前其他的Activity的TaskRecord 是相同的但是為什么分兩次打印我也搞不懂
3.當(dāng)我們一步步點(diǎn)擊返回鍵的時(shí)候我們又發(fā)現(xiàn)之前的Activity被從老的TakRecord全部都導(dǎo)入到了BrowserActivity的TaskRecord中
4.支付寶的Activity一直位于一個(gè)TaskRecord中
- 這些Activity全部處于一個(gè)ActivityTask 中册烈,只是 TaskRecord 不同而已
問(wèn)題:
為什么BrowserActivity退出后最先展示的頁(yè)面不是支付寶的頁(yè)面而是我們app的確認(rèn)訂單頁(yè)(OrderInfoConfirmActivity)?
答案:
_因?yàn)樗麄兊?code>TaskRecord不一樣 雖然說(shuō)我們的OrderInfoConfirmActivity 和 BrowserActivity 不在同一個(gè)進(jìn)程中但是他們的 TaskRecord
是一樣的占贫,支付寶的TaskRecord
肯定和我們不一樣所以退出以后先回到我們的頁(yè)面 _
延申:那么引起TaskRecord不一樣的有那些方式呢酝蜒?
1.設(shè)置 launchMode 為 singInstence
2.設(shè)置和包名不同的 taskAffinity
結(jié)論
- 基于一個(gè)Root Activity打開(kāi)的所有Activity全部都在一個(gè)Activity棧(ActivityStack)中
- 同一個(gè)ActivityStack 可能有多個(gè) TaskRecord
- 進(jìn)程的不通是不影響 ActivityStack 或者 TaskRecord 中內(nèi)容的排列的
- 同一個(gè)TaskRecord中Activity退出的話(huà)是順序的咙俩。