先看一下这个流程
-
在确认订单页中打开支付宝支付页面后
image.png
-
从确认订单页到支付宝的信用评估页
image.png
-
评估完以后回到我们自己的回到BrowserActivity
image.png
-
关掉BrowserActivity回到确认订单页
image.png
-
退后到商详
image.png
6.退回到首页

打印activity栈信息的命令
adb shell
dumpsys activity activities
说明一下
- BrowserActivity 设置了独立进程,但是没有设置 taskAffinity,而且他的launchMode是singleTask
- 第五步和第六步的图新后面补的所以他的TaskRecod 的id或者其他信息和上面不一样
我们从上面截图可以发现
-
BrowserActivity虽然拥有独立进程但是他创建的时候也是在我们app的默认TaskRecord中的
-
当从支付宝信用评估完以后 BrowserActivity看似拥有了自己的TaskRecord 但是我们仔细看 他的 TaskRecord 和之前其他的Activity的TaskRecord 是相同的但是为什么分两次打印我也搞不懂
3.当我们一步步点击返回键的时候我们又发现之前的Activity被从老的TakRecord全部都导入到了BrowserActivity的TaskRecord中
4.支付宝的Activity一直位于一个TaskRecord中
- 这些Activity全部处于一个ActivityTask 中,只是 TaskRecord 不同而已
问题:
为什么BrowserActivity退出后最先展示的页面不是支付宝的页面而是我们app的确认订单页(OrderInfoConfirmActivity)?
答案:
_因为他们的TaskRecord
不一样 虽然说我们的OrderInfoConfirmActivity 和 BrowserActivity 不在同一个进程中但是他们的 TaskRecord
是一样的,支付宝的TaskRecord
肯定和我们不一样所以退出以后先回到我们的页面 _
延申:那么引起TaskRecord不一样的有那些方式呢?
1.设置 launchMode 为 singInstence
2.设置和包名不同的 taskAffinity
结论
- 基于一个Root Activity打开的所有Activity全部都在一个Activity栈(ActivityStack)中
- 同一个ActivityStack 可能有多个 TaskRecord
- 进程的不通是不影响 ActivityStack 或者 TaskRecord 中内容的排列的
- 同一个TaskRecord中Activity退出的话是顺序的。
网友评论