Acitivity启动模式

Android有四种启动模式:standard、singleTop、singleTask、singleInstance。

1、standard(拿来主义)

Android默认启动模式,每次启动一个Activity都会创建一个新的实例,无论这个实例是否已经存在,然后将该实例加入到启动他的任务栈中,会走Acitivity的各个生命周期,是一种典型的多实例实现。注意:当用ApplicationContext启动一个standard模式的Acitivity时会报错,

Android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag.   
Is this really what you want?

这是因为ApplicationContext是一个非Acitivity类型的Context,它没有所谓的任务栈,相当于没有指定它没有任务栈可以放,你需要为待启动的Acitvity指定<pre name="code" class="java">FLAG_ACTIVITY_NEW_TASK标记位,这样的话相当于创建了另一个新的任务栈,也就相当与另一种启动模式——singleTask了

2、singleTop(相邻和并)

即栈顶复用模式。Acitivity启动时如果该Activity已经位于任务栈的栈顶,那么不会重新创建新的实例,同时会回调它的onNewIntent方法,通过这个方法的参数我们可以取出当前请求的信息。当然了,不会走onCreate和onStart方法。如果新的Activity的实例已经存在但不位于栈顶,那么新Activity仍会重新创建。

3、singleTask(唯我独尊)

即栈内复用模式、单实例模式。只要Activity在一个栈中存在,那么多次启动Activity就不会再次创建Activity实例,同singleTop一样,会回调onNewIntent方法。

4、singleInstance(独居主义)

单实例模式,加强版singleTask,加强点为此种模式的Activity只能单独地位于一个任务栈中,即当启动singleInstance模式的Acitivity时,系统会为它创建一个新的任务栈,然后它独自在这个新的任务栈中由于站内复用的特性,后续的请求均不会创建新的Activity,除非这个独特的任务栈被销毁了。

设置启动模式有两种:

1、AndroidMenifest.xml中:android:launchMode="singleTask"

2、intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

区别:第二种优先级高于第一种;第一种无法为Activity设定FLAG_ACTIVITY_CLEAR_TOP,第二种无法为Activity指定singleInstance模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值