关于android:launchMode 的有趣现象


关于singleTask,图中可以看出因为D的taskAffinity没有设置,顾A->D的时候并没有启动新的Task ,奇怪的是当C->D的时候似乎多了一条Task ,并且再次B->C的时候A的Task和DB所在的Task 进行了合并,
关于singleInstance,也存在这种合并的现象,再次C->D的时候会出现AB和B的Task进行了合并。
在C->D的时候如果不仔细看most recent first 的内容,貌似真的多了一个Task
  Running activities (most recent first):
    TaskRecord{52921ca8 #2 A=com.sxl.launchmode U=0 sz=2}
      Run #2: ActivityRecord{529d139c u0 com.sxl.launchmode/com.sxl.launchmode.test.Activity_D t2}
    TaskRecord{529ded14 #3 A=com.test.c U=0 sz=1}
      Run #1: ActivityRecord{529de6f0 u0 com.sxl.launchmode/com.sxl.launchmode.test.Activity_C t3}
    TaskRecord{52921ca8 #2 A=com.sxl.launchmode U=0 sz=2}
      Run #0: ActivityRecord{52984824 u0 com.sxl.launchmode/com.sxl.launchmode.test.Activity_A t2}


但我们查看Task 会发现会发现并没有创建新的,而是在原来的基础上多了一个


Stack#1:
  Task id #2
    TaskRecord{52921ca8 #2 A=com.sxl.launchmode U=0 sz=2}
    Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.sxl.launchmode/com.sxl.launchmode.test.Activity_A }
      Hist #1: ActivityRecord{529d139c u0 com.sxl.launchmode/com.sxl.launchmode.test.Activity_D t2}
        Intent { cmp=com.sxl.launchmode/com.sxl.launchmode.test.Activity_D }
        ProcessRecord{5292dfb0 1315:com.sxl.launchmode/u0a58}
      Hist #0: ActivityRecord{52984824 u0 com.sxl.launchmode/com.sxl.launchmode.test.Activity_A t2}
        Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.sxl.launchmode/com.sxl.launchmode.test.Activity_A }
        ProcessRecord{5292dfb0 1315:com.sxl.launchmode/u0a58}


  Task id #3
    TaskRecord{529ded14 #3 A=com.test.c U=0 sz=1}
    Intent { cmp=com.sxl.launchmode/com.sxl.launchmode.test.Activity_C }
      Hist #0: ActivityRecord{529de6f0 u0 com.sxl.launchmode/com.sxl.launchmode.test.Activity_C t3}
        Intent { cmp=com.sxl.launchmode/com.sxl.launchmode.test.Activity_C }
        ProcessRecord{5292dfb0 1315:com.sxl.launchmode/u0a58}




在Navigate Back的图中也证实了这一点。这也印证了Google的官方文档中的图示http://developer.android.com/guide/components/tasks-and-back-stack.html






基于4.4.3源码关于ActivityStack、TaskRecord、ActivityRecord 的关系图,所谓的Stack,Task都是ArrayList。

是如何管理的在源码中的startActivityUncheckedLocked()@frameworks\base\services\java\com\android\server\am\ActivityStackSupervisor.java 中处理的。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值