了解下singleTask吧, 如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。

解决方案 »

  1.   


    但是我并去触发A这个Activity的操作啊,我并没有从B跳转到A,我感觉理论应该执行Activity B的onRestart onStart onResume才对啊。
      

  2.   


    但是如果这样的话则不会调用onDestory现在有三个Activity  A  B  C在配置文件中把B的启动模式设置为SingTaskA为默认进入的Activity  A--B--C  当在C界面中按下home然后再点击应用程序 这时候不会销毁C 生命周期正常进入 onRestart onStart onResume 这就很奇怪了。
      

  3.   

    Activity设置对应的启动模式,可以避免创建大量重复的Activity。
    启动模式有四种,singleTask是其中的一种。
    该模式只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
    如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。例如:
    若我的应用程序中有三个Activity,C1,C2,C3,三个Activity可互相启动,其中C2为singleTask模式,那么,无论我在这个程序中如何点击启动,如:C1->C2->C3->C2->C3->C1-C2,C1,C3可能存在多个实例,但是C2只会存在一个,并且这三个Activity都在同一个task里面。
    但是C1->C2->C3->C2->C3->C1-C2,这样的操作过程实际应该是如下这样的,因为singleTask会把task中在其之上的其它Activity destory掉。
    操作:C1->C2          C1->C2->C3          C1->C2->C3->C2            C1->C2->C3->C2->C3->C1             C1->C2->C3->C2->C3->C1-C2
    实际:C1->C2          C1->C2->C3          C1->C2                              C1->C2->C3->C1                               C1->C2若是别的应用程序打开C2,则会新启一个task。
    如别的应用Other中有一个activity,taskId为200,从它打开C2,则C2的taskIdI不会为200,例如C2的taskId为201,那么再从C2打开C1、C3,则C2、C3的taskId仍为201。
    注意:如果此时你点击home,然后再打开Other,发现这时显示的肯定会是Other应用中的内容,而不会是我们应用中的C1 C2 C3中的其中一个。
      

  4.   


    老大这点我懂了 但是我现在有一个Activity A和一个Activity B 我现在在manifest中配置A的android:launchMode为singleTask现在在A中加个按钮 跳转到B  然后按home键   按下home后Activity B会进入 onpause  onstop  然后再点击程序图标  竟然会销毁B进入A  这是为什么吗?我并没有去从B跳转到A。  为什么B会销毁掉呢?  唯独这个疑问不懂
      

  5.   


    老大这点我懂了 但是我现在有一个Activity A和一个Activity B 我现在在manifest中配置A的android:launchMode为singleTask现在在A中加个按钮 跳转到B  然后按home键   按下home后Activity B会进入 onpause  onstop  然后再点击程序图标  竟然会销毁B进入A  这是为什么吗?我并没有去从B跳转到A。  为什么B会销毁掉呢?  唯独这个疑问不懂
    可能B并没有销毁。只是因为A的启动模式为singleTask,其实例只有一个。并且按下home后,B是stop掉了,但是别忘了task中,最上面的实例是A。
    还是那个解释:若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
      

  6.   

    所以,再次点开,看到的是A,而不是B.
    再者,按home键,在task中,这两个Activity的实例都存在,B并没有销毁,除非调用ondestory