日报2015/10/12(极客学院安卓视频学习)

Android 中 Activity 启动模式

tips:用getTaskId() 来获取当前任务的Id

使用一个按钮来启动自己

startActivity(new Intent(MainActivity.this,MainActivity.class));

通过AndroidManifest.xml中Activity节点设置启动模式

android:launchMode=xxx

standard模式

第一次启动
通过按钮启动

可以发现,TaskId都是55,而Activity的Id(通过toString())则每一次都不同,说明都在同一个任务栈里,只是创建了不同的实例,按后退键会显示之前的不同实例。也就是说在这个55号栈里,堆叠着刚才按钮启动的许多个Activity实例,按照先进后出的原则存在,例如323979d这个实例就在6556ef1的实例上面。


singleTop模式

singleTop

在此模式下,用单独一个Activity测试,启动自身的话TaskId和实例都是同一个,未曾变化,因为栈里面只有一个实例,它是栈顶,所以不创建新的实例

新建第二个Activity再作测试(同样配置singleTop启动)

and两个不同的Activity中的控件取相同的名字是没关系的

1、测试A跳到B,B跳到自身

A
B1
B2

可以看到,A跳到B时创造了新的实例,B跳到自身没有创造新的实例,栈中从下至上有A1,B1实例。

2、测试A跳到A,A跳到B,B跳到A
A1->A1
这里写图片描述
这里写图片描述
A1->B1
这里写图片描述
B1->A2
这里写图片描述

这时A的序号已经发生了变化,因为从B去启动A时,栈顶实例是B,所以启动A时新建一个实例A2,此时栈里面从下至上有A1,B1,A2


singleTask模式

将A的启动模式改为singleTask,尝试A->B->A

A1

栈中:A1

B1

栈中:A1、B1

A1

栈中:A1

可以看到这两个A是同一个id,因为此模式下,从B启动A,会将栈中其他实例弹出,直接启动最开始的这个A,在最后一张图的时候,回退,会直接退出程序,因为此时栈中只有A1这个实例了。

singleInstance模式

将A改为singleInstance模式启动,还是按照上次的方式进行测试

这里写图片描述
这里写图片描述
这里写图片描述

可以清楚看到,A和B已经不再是在同一个栈里了,一个栈里面只有一个实例,最后一张图的时候如果后退,会退回B,再后退就回到桌面了。这个模式和其他三个模式都不同,实例不存放在相同的任务栈。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值