Activity四种启动模式详解

  1. Standard(标准模式):默认的启动模式。每次启动一个Activity时都会创建一个新的实例,不管该实例是否已经存在。该模式适合独立的任务或者多个实例并存的情况。(出现在被打开的task中)
  2. SingleTop(栈顶复用模式):如果任务栈已经存在一个要启动的Activity实列,就复用该Activity置于栈顶不会重新创建Activity的实列,复用Activity会执行onNewIntent方法,但是onCreate 、onStart方法不会执行,因为它没有改变.如果任务栈中或者任务栈顶没有实例就创建一个Activity实例存入其中,置于栈顶。
    使用场景:适合接收通知内容显示页面,当用户从任务栏中进入查看消息内容界面时,如果设置为singleTop时,这样每次行为都使用同一个实例,用户点击返回时不会存在多个消息页面的情况。(出现在被打开的task中)
  3. SingleTask(栈内复用模式):
    1. 系统会维护一个栈来管理Activity实例,如果要启动的Activity已经在栈中存在,则将该Activity上的所有实例全部出栈,然后调用它的onNewIntent()方法;否则就创建新的实例并放入栈中。**该模式适合作为App的主界面。**主页面设计为SingleTask,当用户点击回到主页时,主页上面的所有Activity都被销毁。
    2. 如果SingleTask是另一个应用的Activity呢?如果这时候另一个应用已经被打开,那么这个Ac就会被放到另一个应用的栈顶,并且系统会把另一个应用的全部ac拿过来,压在这个应用的上面。如果另一个应用还没被打开,那么只会打开一个Ac并且压在这个应用上面。因此,SingleTask既可以提供给外部,也可以内部使用。
    3. 另一个应用(taskB)压在原来应用(taskA)的时候,这时候taskB进入后台的话,taskA和taskB就会分离。前台task就变成了taskB,这时候连续按返回键退出了taskB的时候,将会直接回到桌面而不是taskA中。如果这个设计不好,但又确实需要用到singleTask,可以通过设置属性allowTaskReparenting来允许Activity先出现在TaskA中,然后回到桌面的时候打开TaskB时,这个Ac会回到TaskB中并出现在顶端。
    4. SingleTask保证了只有一个task里有最多一个这个activity
  4. SingleInstance(单例模式):
    1. 它的行为模式和singleTask差不多,只是有一个更严格的要求—>一个task里只有它一个activity
      使用场景:singleInstance适合需要与程序分离开的页面。它要独自霸占一个task。在这个activity上打开的activity会进入其他的task。singleInstancce适合用来做闹铃提醒,将闹铃提醒与闹铃设置分离。
    2. 所以SI和ST的区别是,SI被返回后会直接回到原先的app,而ST会在自己的app里回退
    3. 当SI在栈顶时,用户返回桌面再打开SI自己的app的时候,会发现SI已经消失了,它即不再原先的应用又不在自己的应用。它并没有被销毁,它只是藏了起来,当它再次被打开的时候又会被复用展现在栈顶。这跟taskAffinity冲突有关
  5. TaskAffinity
    1. 一个app的所有Activity的默认taskAffinity都是一样的,就是app的包名。
    2. 默认情况下Activity会进入当前的Task
    3. 如果是SingleTask,则会进入自己的taskAffinity的Task,如果自己的taskAffinity和当前的Task是同一个,那就直接进入,否则就回到自己的Task,没有则创建。
    4. 当多个task的taskAffinity相同时,只能有一个显示在最近任务列表,这也是为什么前面提到的SingleInstance会消失的原因。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值