Android中关于standard、singleTop、singleTask、singleInstance四种启动模式

这篇博客和大家共同探讨一下Android下四种启动模式的介绍,先介绍一点相关知识
首先启动模式是针对activity的,在AndroidManifest.xml文件中application节点下,activity节点中进行配置launchMode属性,其次android系统会对每个APP维护一个任务栈(后进先出),默认情况下,每启动一个activity都会将其入栈。Android下启动模式的设定
1.standard标准/默认模式:standard`模式即默认模式,当activity为此种模式时,开启这个activity时不会进行任何检查,直接将新开启的activity入栈并跳转页面;

2.singleTop栈顶复用模式:当activity为此种模式时,开启这个activity会对当前栈顶activity进行检查,如果栈顶activity与待开启的activity一致(或者说为同一个activity),那么将复用栈顶acticity,而不会启动新的。举个例子,比如当前栈顶activity为A,而此时又需要启动A,那么将直接显示已有的。Android自带的浏览器的书签activity就是采用的就是此种启动模式,除此之外,比较典型的应用场景是APP的通知响应页,比如淘宝APP在通知栏显示了三条通知,那么当用户点击第一条通知时,跳转到对应页面,点击第二第三条通知时,应当更新页面信息或者不响应(页面内容无变化时),而不是重复打开三个页面;

3.singletask栈内复用模式:这个模式有点复杂,当activity为此种模式时,开启这个activity会首先检查这个activity的taskAffinity属性,这个属性决定了这个activity归属的任务栈(默认为继承application的taskAffinity属性,如果application也没有写明该属性,则为APP包名),接着会根据这个属性值检查对应的任务栈,如果这个任务栈不存在就创建这个任务栈,如果任务栈存在就检查任务栈中是否存在这个activity的实例,存在则直接复用(调用activity的onNewIntent()方法,同时清空这个activity上所有其他activity),不存在就创建一个新的实例并入栈。举个例子,比如当前栈中自下而上存在A,B,C,D四个activity,如果此时在D中开启A,那么将会跳转到位于栈底的A页面,并且会关闭栈中位于A页面之上的B,C,D三个页面。在关闭一个多页面activity并退回到桌面时,一种方案就是将MainActivity设为此种启动模式并重写键盘返回键;

4.singleInstance模式:当activity设定为此种模式时,那么系统将会为这个activity单独开启一个栈,在这个栈中只能存在这一个activity,并且对于一个activity这种栈只能开启一个,重复开启页面时会复用之前的activity。注意:在此种模式下,由于存在至少两个栈,所以用户按返回键依次退出页面时,需要考虑栈的次序问题,可以这么理解,当前显示的这个页面所处的栈先退出,等到这个栈全部清空后,在依次退出下一个栈。Android自带的电话程序中的接听电话activity就是采用此种启动模式的,除此之外,闹钟也是采用这种方式启动的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值