Activity启动模式

Activity有四种启动模式,分别为standard、singleTop、SingleTask、singleInstance。

  1. 使用方式

我们在AndroidManifest.xml中的Activity标签下,添加属性android:launchMode=“singleTop”即可使用。

  <activity
            android:name=".main.MainActivity"
            android:launchMode="singleTask">

 

2. 区别

AndroidManifest中launchMode默认模式是“standard”。

如下表所示,这些模式分为两大类:

用例启动模式多个实例?注释
大多数 Activity 的正常启动standard默认值。系统始终会在目标任务中创建新的 Activity 实例并向其传送 Intent。
singleTop有条件如果目标任务的顶部已存在一个 Activity 实例,则系统会通过调用该实例的 onNewIntent() 方法向其传送 Intent,而不是创建新的 Activity 实例。
专用启动
(不建议用作常规用途)
singleTask系统在新任务的根位置创建 Activity 并向其传送 Intent。 不过,如果已存在一个 Activity 实例,则系统会通过调用该实例的 onNewIntent() 方法向其传送 Intent,而不是创建新的 Activity 实例。
singleInstance与“singleTask"”相同,只是系统不会将任何其他 Activity 启动到包含实例的任务中。 该 Activity 始终是其任务唯一仅有的成员。

上面的表说的比较简单,下面详细说明:

  • standard

    最简单最常用的启动模式。每次都会在栈顶创建新的Activity实例,并把Intent传递给这个Activity。
  • singleTop

    和standard类似,唯一的区别就是,如果当前要启动的Activity在栈顶,那么系统会调用onNewIntent方法向已存在的这个Activity传递数据,不会再新创建Activity。
  • singleTask

    如果被启动的Activity设置了 taskAffinity(用于指定Activity 任务栈),如果指定的task存在,则会将task移到前台;如果指定task不存在,则创建指定taskAffinity的task。 如果task中存在实例,则移除实例之上的所有实例并显示出来,执行原实例的onNewIntent(),否则创建实例进入task顶部。
  • singleInstance

    启动一个新的任务栈,并新建Activity实例。如果已经存在这样的任务栈和Activity,则直接重新启动该Activity

注意:

1. 如果采用了非standard模式,则可能会导致onActivityResult异常。比如,在Android版本5.0以下的Android手机,目标Activity采用singleTask,在启动页的onActivityResult中,reulst_code一直是-1 。

2. 如果从一个任务栈切换到另外一个任务栈,则Activity返回时,总是先从当前任务栈弹出Activity,而不会切换到新的任务栈。所以如果是下,启动顺序中含有singleInstance模式的Activity,则返回顺序会发生变化。比如A B C 三个页面,其中B是singleInstance;AC是默认Standard。其中A启动B,B启动C,则返回的顺序变为C A B。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值