activity 四种启动模式

Android的activity 有四种启动模式,这是一个跟task管理相关的概念。四种模式为:

  • standard
  • singleTop
  • singleTask
  • singleInstance


可以在AndroidManifest.xml配置activity的启动模式,like: android:launchMode="singleTop".

每种启动模式说明:

  • standard:   标准启动模式,并不新建task,除非从home或launch启动。 启动acitivity时:

                   总是新建acitivity, 如果task中已经存在某个activity的实例,那么再次启动这个activity时,会重新创建新的实例,也就是一个task中允许有多个相同的activity实例,每个实例处理不同的intent.

  • singleTop: 以这种方式启动的activity 必须在task的顶端,并不新建task,除非从home或launch启动。  启动acitivity时:如果已有task 中没有该activity的实例,则新建一个实例.
  •   如果task 中没有该activity的实例,则新建一个实例.
  •   如果task的栈顶已经存在了一个这个activity的实例,则复用这个实例,只通过onNewInstent()发送新的intent.
  •   如果task中存在一个该activity的实例,但是不在栈顶,则在顶端新建一个实例。行为与standard一样。可以创建多个

                  

  • singleTask: 一个task中该activity的实例只能有一个。这个稍微复杂,可能新建task,也可能加入到已有的task中. 这与affinity task相关。 一个activity的默认affinity task是它的包名, 也可以在AndroidManifest.xml中指定affinity  task name: android:taskAffinity="AffinitytaskName", AffinitytaskName可以是某个应用的包名,那么你的activity会加入到该应用的task中, 也可以是自己命名的名字。

              启动acitivity时:

  •  如果系统中没有这个activity的affinity task, 创建一个新affinity task, 创建该activity的实例加入到新的task中。
  • 如果已经有这个activity 的affinity task,但是没有该activity实例, 创建一个新的实例加入到该task栈顶。
  • 如果已经有这个activity 的affinity task,并且该task中已经有该activity的实例, 退出该task中这个activity之上的全部activity, 然后复用该activity实例,发送new intent到该activity.
  • singleInstance:系统中有且只有一个这个activity实例,且单独在一个task中。总是在新的task中开启,再次启动时复用该activity实例,只是调用onNewIntent()传递新的intent.

               





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值