activty的四种启动模式

其实很基础了,但是由于用的不多,总是忘.所以自己总结总结记下来.

  1. standard 标准
       多么标准的典型栈(后进先出),也是我们整天用的跳转方式.简单我都不知道该咋解释.
      ABC表示三个activity.
      启动:A–>B–>C
      回退:C(关闭)–>B(关闭)–>A

  2. singleTop
      ABC表示三个activity.当C的启动模式时singleTop
      启动:A–>B–>C (C中再次启动C,走onNewIntent(),不走oncreate(),不新建实例)
      这个东西,其实意思好懂,但是太不经常用了,就会被岁月所侵蚀.我只好百度了一下,这个模式的使用场景,
      最经常使用的是:就是当有多条的通知点击会进入同一个活动的时候,因为有的用户是不会考虑别的,通知一个一个点,看完活动,不关,继续点击第二个,有几个通知就可能出现相同的界面相互叠加,所以会用singleTop.保持在栈顶,不新建活动.但是需要注意,这个时候走的是调用 onNewIntent()方法,这方法内处理重新赋初值,加载数据.
      还有一种场景:耗时操作返回页面 从activity A启动了个service进行耗时操作,或者某种监听,这个时候你home键了,service收集到信息,要返回activityA了,就用singleTop启动,实际不会创建新的activityA,只是resume了
      还有人提出的一种场景连续的快速的点击,毕竟有人的手速堪比加藤鹰,会加载多个活动,这个是可以通过其他方法避免,为了避免这个问题,不可能所有的活动都写成singleTop吧,我是不认同这个的

  3. SingleTask
      它是singleTop的升级版,singleTop只检查栈顶,SingleTask是只要当前任务栈里面存在此活动,就不会新建,同样的会走走onNewIntent(),只要没有新建实例就会走onNewIntent(),当然需要注意两点:
      这个界面如果在很早的界面的时候,可能因为内存压力,被系统kill,这个时候我也没遇到过,但是实际项目需要考虑,这个肯定会重新走oncreate(),但是还会不会走onNewIntent(),
       SingleTask会导致onActivityResult失效,你需要使用广播传值,或者一些其他的方法
       该实例在任务栈只能存在一个,如果再启动,则把上面的Activity实例全部清除
       应用场景
       一.适合作为程序入口点,当在切换数个活动之后,需要返回程序首页,就可以使用,其实这个我没怎么用过,我都是写的活动控制器,然后直接finish掉之前的界面,重新跳转.毕竟这个不能通过onActivityResult传值,但是我的方法也有利有弊,请大家自己衡量使用吧
       二:做浏览器、微博之类的应用,比如其他App需要打开我们的浏览器页面,就可以配置他为singleTask模式,保证他只有一个唯一实例,节约内存同时按下返回键后的感官也更顺畅 android:taskAffinity=最好也指定一个新的包名,不指定为默认,但是如果提供给其他应用使用,如果不指定,关闭此页面,就在留在此应用了,但是不写也可以通过其他方法不留在此页面
  4. singleInstance
    一个比一个没用过,但是还是要说说.
    单一实例模式,整个手机操作系统里面只有一个实例存在。自己在一个栈里,而且就他一个单身狗.
    适合需要与程序分离开的页面,比如呼叫来电界面,闹铃提醒界面,都是系统,我感觉自己做过的app是在是用不到,好失落.
    singleInstance重复打开也走onNewIntent()方法也会导致会导致onActivityResult失效
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值