standard、singleTop、singleTask和singleInstance四种Activity启动模式

1. standard

    不同的Activity在同一个栈中,

    每次创建新实例的时候,新实例便会堆放到栈顶。

    

      当点返回键的时候,便会从栈顶按顺序将实例移除栈。直至栈为空则退回到桌面。

 

2. singleTop

    不同的Activity在同一个栈中。   

    ① 如果此时Aty1的实例在栈顶,此时再创建一个新的Aty1并不会成功。

    

    ② 如果Aty_1不在栈顶,此时再创建一个Aty1的实例,会产生一个新的Aty1实例到栈顶。

    

    当点返回键的时候,便会从栈顶按顺序将实例移除栈。直至栈为空则退回到桌面。

    

3. singleTask

    不同的Activity在同一个栈中。

    ① 如果此时Aty1的实例在栈顶,此时再创建一个新的Aty1并不会成功。

  

    ② 如果Aty_1不在栈顶,此时再创建一个Aty1的实例,页面会返回到任务栈中存在的Aty1的实例,并将Aty1上面所有的实例移出栈。

    

    当点返回键的时候,便会从栈顶按顺序将实例移除栈。直至栈为空则退回到桌面。

 

4. singleInstance

    不同的Activity 处于不同栈中

    ① 如果此时Aty1的实例在栈顶,此时再创建一个新的Aty1并不会成功。

   

    ② 如果此时Aty2的实例还未被创建,则创建的Aty2的实例时会存放到一个新的任务栈中。

    

    ③ 如果此时Aty1的实例已存在且我们在Aty2的页面中创建新的Aty1实例时,则不会创建新的Aty1实例,而是页面跳转到原来任务栈中存在的Aty1的实例,但存放Aty2实例的任务栈仍然存在

    

    当点返回键的时候,便会依次销毁相应的任务栈,直至任务栈数为空则退回到系统桌面。

 

例如:现有2个项目,taskA、taskB。taskA负责调用taskB中指定的界面。

taskB中有3个界面,a、b、c,每个界面显示它所在的task id。

SingleTask:

其中b界面被声明为SingleTask。

先运行taskB,显示a界面,由a界面调用b界面,这时b界面的taskid与a界面的taskid是一致的,说明b界面与a界面在同一个task中;由b界面调用c界面时,c界面的taskid与a和b界面的taskid一致,说明这三个界面是在同一个task中。当前显示的是c界面,此时按Home键回到桌面,运行taskA的界面调用taskB的b界面,这时b界面显示出来,它的taskid没有变,还是之前的taskid,只不过之前显示的是c界面,这时c界面已经不知所踪,这时再按back键,则回到了a界面,然后是taskA的界面。

这说明,SingleTask所标注的Activity在被自身的app调用时,是不新建task的,同时,如果系统中存在了这个SingleTask界面的实例时,会将其所在的task切换到前台,并把SingleTask界面之后开启的其他界面全部关闭(有待考证是否关闭)。

另外有一种情况,例如:a界面被调用,这时按Home键返回到桌面,启动taskA,并调用b界面,这时b界面的taskid与a界面的一致,说明b界面与a界面同属于一个task。如果直接运行taskA调用b界面,b的taskid与taskA的界面的taskid不同,说明在新task中实例化了b界面,由b界面调用c界面,c界面的taskid与b界面一致,说明b与c同属于一个task。

SingleInstance:

将b界面声明为SingleInstance。

先运行taskB,显示a界面,由a界面调用b界面,这时b界面的taskid与a界面的taskid不同,说明b界面是在新task中生成的实例;由b界面调用c界面,c界面的taskid与a界面的taskid相同,说明a、c界面同属于一个task。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值