在配置中设置:<activity android:name=".TestB" android:launchMode="singleTask"/>
按照文章说的:singleTask:会产生一个新的task,但通过打印taskId发现,TestB 的taskId 跟 调用TestB的TaskId是同一个值,十分不解,跪求高人指点。

解决方案 »

  1.   

    FLAG_ACTIVITY_NEW_TASK 也是一样的效果。
      

  2.   

    如果已经有了,比如同一个应用程序activity a设置了楼上的那个flag。activity a 到activity b,再打开activity a,仍然是同一个task,而不会另外开一个。但是不同的app,则task不同
      

  3.   

    singleTask是指当前栈中只允许有一个Activity的实例。
    当一个Activity调用打开此Activity 时,这两个Activity 在同一个task里面,但这个栈还是允许其它Activity加入的。当你在startActivity时,添加了FLAG_ACTIVITY_NEW_TASK,则表明重新启动了一个task,当然这个Activity是在新的task中,新的Task也只能允许有一个此Activity了
      

  4.   

    我介意楼主去了解一下luncheMode的四种模式的区别,了解后会深有体会的 。
      

  5.   


    当你在startActivity时,添加了FLAG_ACTIVITY_NEW_TASK,则表明重新启动了一个task,当然这个……你说的意思:A 调用 B的过程中, 添加了FLAG_ACTIVITY_NEW_TASK,则B是在新的Task中,不是跟A在同一个Task中? 我打印过消息,确定A 跟 B是在同一Task里面。
      

  6.   

    会产生一个新的task个人愚见不是很确切
    它和singleInstance大体一样
    只是singleInstance栈中有且只能有这一个实例
    而singleTask得话,可以用多个,当调用时,若栈中已经存在会清除所有在其上端的页面
    你TestA没有指定模式的话,默认和TestB是在一个栈中因此一般如果不是启动页面 不建议使用singleTask模式。会产生很多问题
      

  7.   

    你将a也设置为singleTask后,就会发现不在一个taskid中了
    最简单的测试方法是,你在b中点击back键,会发现直接返回home页面,而不是返回a
    因为b已经是当前task的top,没有其他页面在其下面,所以返回到home
      

  8.   


    兄弟,你测试下看看。我测试了,跟你说的不一样,a 跟 b 在同一task中
      

  9.   

    sorry
    知识力不足,漏掉了一个activity标签中有一个属性为android:taskAffinity=“String”。
    如果不设置此属性,默认一个应用程序只有一个栈,这个栈以应用包命为单位。这个东西我也总结了挺长时间,参见我的网站
    http://www.mikebai.com/html/2012-01/915.html
    http://www.mikebai.com/html/2012-01/911.html