美文网首页
app调用支付宝信用评估过程中的思考

app调用支付宝信用评估过程中的思考

作者: 河里的枇杷树 | 来源:发表于2018-07-19 14:39 被阅读13次
先看一下这个流程
  1. 在确认订单页中打开支付宝支付页面后


    image.png
  2. 从确认订单页到支付宝的信用评估页


    image.png
  3. 评估完以后回到我们自己的回到BrowserActivity


    image.png
  4. 关掉BrowserActivity回到确认订单页


    image.png
  5. 退后到商详


    image.png

6.退回到首页


image.png
打印activity栈信息的命令
adb shell
dumpsys activity activities

说明一下

  1. BrowserActivity 设置了独立进程,但是没有设置 taskAffinity,而且他的launchMode是singleTask
  2. 第五步和第六步的图新后面补的所以他的TaskRecod 的id或者其他信息和上面不一样

我们从上面截图可以发现

  1. BrowserActivity虽然拥有独立进程但是他创建的时候也是在我们app的默认TaskRecord中的

  2. 当从支付宝信用评估完以后 BrowserActivity看似拥有了自己的TaskRecord 但是我们仔细看 他的 TaskRecord 和之前其他的Activity的TaskRecord 是相同的但是为什么分两次打印我也搞不懂

3.当我们一步步点击返回键的时候我们又发现之前的Activity被从老的TakRecord全部都导入到了BrowserActivity的TaskRecord中

4.支付宝的Activity一直位于一个TaskRecord中

  1. 这些Activity全部处于一个ActivityTask 中,只是 TaskRecord 不同而已

问题:

为什么BrowserActivity退出后最先展示的页面不是支付宝的页面而是我们app的确认订单页(OrderInfoConfirmActivity)?

答案:

_因为他们的TaskRecord不一样 虽然说我们的OrderInfoConfirmActivity 和 BrowserActivity 不在同一个进程中但是他们的 TaskRecord 是一样的,支付宝的TaskRecord肯定和我们不一样所以退出以后先回到我们的页面 _

延申:那么引起TaskRecord不一样的有那些方式呢?

1.设置 launchMode 为 singInstence
2.设置和包名不同的 taskAffinity

结论

  1. 基于一个Root Activity打开的所有Activity全部都在一个Activity栈(ActivityStack)中
  2. 同一个ActivityStack 可能有多个 TaskRecord
  3. 进程的不通是不影响 ActivityStack 或者 TaskRecord 中内容的排列的
  4. 同一个TaskRecord中Activity退出的话是顺序的。

最后推荐一篇ActivityRecord、TaskRecord、ActivityStack的文字

相关文章

网友评论

      本文标题:app调用支付宝信用评估过程中的思考

      本文链接:https://www.haomeiwen.com/subject/yjltmftx.html