Activty的LaunchMode以及Flags

activity有四种启动模式:standard,singleTop,singleTask,singleInstance

(1)、standard:标准模式,这也是系统的默认模式。每次启动一个Activity都会重新创建一个实例,不管这个实例是否存在,典型的多实例实现。比如说A启动B,那么B就会进入到A所在的栈中。所以大家可能遇到过,当我们用ApplicationContext去启动standard模式的Activity的时候会报错,就是由于非Activity类型的Context并没有所谓的任务栈。解决这个问题的方法就是为带启动的Activity指定DLAG_ACTIVITY_NEW_TASK标记位,这样启动的时候就会为它创建一个新的任务栈,这个时候待启动Activity实际上是以SingleTask模式启动的。

(2)、singleTop:栈顶复用模式。这种模式下,如果Activity位于栈顶的话,就不会被重建,同时它的onNewIntent方法会被回调,通过此方法的参数我们可以取出当前请求的信息。如果新的Activity不处于栈顶,那么新的Activity仍会重新重建。

(3)、singleTask:栈内复用模式。这是一种单实例模式,只要Activity在一个栈中存在,那么多次启动Activity就不会被重新创建实例,系统也是会调用onNewIntent。具体一点,当 一个具有SingleTask的Activity启动,比如A启动,系统会首先去寻找是否存在A想要的任务栈,如果不存在,就会重新创建属于A的任务栈,然后把创建的A的实例放入站中,如果存在,就是把A调到任务栈的栈顶并调用它的onNewIntent方法,如果实例不存在,就创建A的实例并把A压入栈中。

(4)、singleInstance:单实例模式,这是一种加强版的singleTask,它除了具有singleTask模式的所有特性外,还加强了一点,那就是具有此种模式的Activity只能单独的位于一个任务栈中,换句话说,比如Activity A是singleInstance模式,当A启动后,系统会为它创建一个新的任务栈,然后A独自在这个新的任务栈中,由于栈内复用的特性,后续的请求均不会创建新的Activity,除非这个独特的任务栈被系统销毁了。

Activity的Flags

这里分析一下常见的标记位

FLAG_ACTIVITY_NEW_TASK,这个标记位的作用是为Activity指定“singleTask”启动模式

FLAG_ACTIVITY_SINGLE_TOP,这个标记位的作用是为Activity指定"singleTop”启动模式

FLAG_ACTIVITY_CLEAR_TOP,当它启动时,在同一个栈中的所有位于它上面的activity都要出栈,singleTask启动模式就具有此标记位的效果

FLAG_ACTIVITY_EXCLUDE_FORM_RECENTS

这个标记位我们也经常遇到,比如当某些情况我们不希望用户通过历史列表回到我们的Activity的时候,且等同于XML中指定Activity的属性android:excludeFromRecents="true"

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值