Activity启动模式

1.LaunchMode

四种模式

1.1 standard

系统默认模式,每次启动都会重新创建一个新的实例,不管其是否存在实例。这是一种典型的多实例实现,一个任务栈中可以有多个实例,没个实例也可以属于不同的任务栈。谁启动这个Activity那么这个实例就属于哪个Activity所在的栈中。
当你用非Activity类型的Context(如ApplicationContext)去启动一个standard模式的Activity时候会报错:

E:/AndroidRuntime(674) android.util.AndroidRuntimeException: Calling startActivirty from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

这是因为非Activity类型的Context没有所谓的任务栈。解决方法就是为代启动的Activity指定FLAG_ACTIVITY_NEW_TASK 标记位,创建一个新的任务栈

1.2 singleTop

栈顶复用模式。在这种模式下,新的Activity已经位于任务的栈顶,那么此Activity不会重新被创建,同时会执行onNewIntent方法,通过此方法我们可以取出当前请求的信息。并且该Activity的onCreate,onStart,不会被系统调用。如果新Activity的实例已存在但不位于栈顶,那么新的Activity仍然会重新创建。

1.3 singleTask

栈内复用模式。这是一种单实例模式,这种模式下,只要Activity在一个栈中存在,那么多次启动该Activity都不会重新创建实例,和singleTop一样,系统也会调用onNewIntent获取请求信息
举例:(1) 栈S1 存在实例A,B,要在栈S2启动实例C(singleTask模式下),则栈S2,和C都会被创建。
(2)在1的前提下,在S1启动C,由于S1已存在,系统直接创建C并将其入栈道S1。
(3)如果栈S1存在顺序ACBD的实例,由于C实例已存在,根据栈内复用原则,C实例不会重新创建,调用其onNewIntent方法,同时singleTask默认具有clearTop的效果,故会把栈内C上面的实例全部出栈,最终S1上只有AC。

1.4 singleInstance

单实例模式。这是一种加强的singleTask模式,他除了具有singleTask的所有属性外,还加强了一点,此模式下Activity只能单独的位于一个任务栈中。比如Activity A是singleInstance模式,当A启动后,系统会为它重新创建一个新的任务栈,由于栈内复用特性,后续请求均不会创建新的Activity A。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值