关于android:launchMode 的有趣现象

来源:互联网 发布:mac网页图片显示问号 编辑:程序博客网 时间:2024/04/30 02:38


关于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
原创粉丝点击