Activity的启动模式

Activity的启动模式

1.1 Activity的LaunchMode

1.1.1为什么需要启动模式

因为Activity的使用任务栈进行对Activity实例控制,任务栈是一种先进后出的栈结构。如果我们多次启动同一个Activity,系统会重复创建多个实例,这样子就会导致某些场景下,应用的界面跳转不合用户的期望。例如:用户一般希望回到主界面时,再次点击back键后,就是表示真正的退出应用。但是如果是栈形式的每次启动一个Activity就会创建一个实例的一个控制方式,那么就实现不了这个结果。所以,Android设计了启动模式来修改系统的默认行为。

1.1.2启动模式种类

  1. standard:标准模式。系统默认的模式。每一次启动Activity都会重新创建一个新的实例,不管这个实例是否已经存在。
  2. singleTop:栈顶复用模式。如果新Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时它的onNewIntent方法会被调用。
  3. singleTask:栈内复用模式。也会回调其onNewIntent方法。singleTask默认具有clearTop的效果,会导致栈内在该实例前面的所有实例都会被出栈。(生命周期为:onPause->onNewIntent->onResume)
  4. singleInstance:单实例模式。这种Activity只能单独地位于一个任务栈中。比如:Activity A是singleInstance模式,当A启动后,系统会为它创建一个新的任务栈,然后A独自在这个新的任务栈中,由于栈内复用特性,后续的请求均不会创建新的Activity,除非这个独特的任务栈被系统销毁了。

1.1.3Activity的Flags

  1. FLAG_ACTIVITY_NEW_TASK
    该标记位的作用与singleTask启动模式意义一样。
  2. FLAG_ACTIVITY_SINGLE_TOP
    该标记位的作用与singleTop启动模式意义一样。
  3. FLAG_ACTIVITY_CLEAR_TOP
    具有该标记位的Activity,当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈。
    这个模式一般需要和FLAG_ACTIVITY_NEW_TASK配合使用,在这种情况下,被启动Activity的实例如果存在,那么系统就会调用它的onNewIntent。
    如果被启动的Activity采用standard模式启动,那么它连同它之上的Activity都要出栈,系统会创建新的Activity实例并放入栈顶。
  4. FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
    具有这个标记的Activity不会出现在历史Activity的列表中,当某些情况下,我们不希望用户通过历史列表回到我们的和Activity时,就可以使用该标记。他等同于在XML中指定Activity的属性android:excludeFromRecents="true"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值