安卓4种启动模式应用场景

Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。


启动模式设置: 

<activity android:name=".MainActivity" android:launchMode="standard" />  

1.Standard模式(默认)--队列排序

我们平时直接创建的Activity都是这种模式的Activity,这种模式的Activity的特点是:只要你创建了Activity实例,一旦激活该Activity,则会向任务栈中加入新创建的实例,退出Activity则会在任务栈中销毁该实例。

2. SingleTop模式--任务栈栈顶只有一个实例。若Activity A在栈顶,就不会在A的上面创建新的 Activity A 了

这种模式会考虑当前要激活的Activity实例在任务栈中是否正处于栈顶,如果处于栈顶则无需重新创建新的实例,会重用已存在的实例,否则会在任务栈中创建新的实例。


应用场景:
a、消息推送界面。若当前停留在消息详情界面A,突然来推送消息了,点击推送消息,又创建了一个详情界面A,按返回键back,用户会发现,点击了返回怎么还是停留在这个详情界面A呢,这样造成视觉差异
b、登陆界面A,点击按钮之后进入主界面B。由于有可能跳转的时候加载动画的延迟,用户点击登录按钮两次,依次加载出来两个一模一样的界面B,按返回键back,还是停留在这个主界面B。
c、耗时操作。Activity A开启了一个服务用语监听,然后按home键,Activity A onStop(),服务来消息了,返回给Activity数据,如果在清单文件中配置了A的启动模式,返回给Activity消息之后启动A就不会创建新的实例,只是resume()了
3. SingleTask模式--此任务栈只有一个实例,如果Activity A不在栈顶,且存在A的实例,会销毁A上面所有的Activity,暴露出 Activity A

如果任务栈中存在该模式的Activity实例,则把栈中该实例以上的Activity实例全部移除,调用该实例的newInstance()方法重用该Activity,使该实例处於栈顶位置,否则就重新创建一个新的Activity实例。


应用场景:
做浏览器、微博之类的应用,比如其他App需要打开我们的浏览器页面,就可以配置他为singleTask模式,保证     他只有一个唯一实例,节约内存同时按下返回键后的感官也更顺畅。但是需要注意,提供给人调用的页面最好是     栈底元素。因为,如果自己的客户端处于运行状态,按下Home键后台挂起。此时如果使用如果其他应用(比如说      QQ)调起自己的客户端某个页面,不做任何处理的情况下,按下回退或者当前 Activity.finish(),页面都会     停留在自己的客户端(因为自己的Application回 退栈不为空),这明显不符合逻辑的。
4. SingleInstance模式
当该模式Activity实例在任务栈中创建后,只要该实例还在任务栈中,即只要激活的是该类型的Activity,都会通过调用实例的newInstance()方法重用该Activity,此时使用的都是同一个Activity实例,它都会处于任务栈的栈顶。此模式一般用于加载较慢的,比较耗性能且不需要每次都重新创建的Activity。
应用场景:
正在通话的界面


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值