Android Activity启动模式

Standand:

既标准模式,这也是系统的默认模式,每次启动一个Activirty都会重新创建一个新的实例,不管这个实例是否已经存在。在这种模式下,谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在的栈中。

如果我们使用ApplicationContext去启动standand模式的Activity时会出现android.util.AndroidRuntimeException:CallingstartActivity from outside of an activity context requires theFLAG_ACTIVITY_NEW_TASK flag.这是因为standand模式的Activity默认进去启动它的Activity所在的任务栈,但是非Activity类型的Context并没有所谓的任务栈。这也验证了在Sandand模式下,谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在的栈中。

SingleTop:

栈顶复用模式,在这种模式下,如果将要启动的Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时它的onNewIntent方法会被回调,如果将要启动的Activity不任务栈的栈顶那么该Activity仍然被会重新创建。

         如当前任务栈有A、B、C、D四个Activity。其中A在栈底,D在栈顶。此时如果要启动D而且D的启动模式为singleTop那么栈内情况依然为ABCD。如果D的启动模式是standand那么栈内的情况为ABCDD。如果要再次启动A而且A的启动模式是singleTop,那么此时栈内情况为ABCDA,因为A不再栈顶。

SingleTask:

         栈内复用模式,在这种模式下,只要Activity在一个栈中存在,那么再次启动此Activity都不会重新创建实例,同时也会回调其onNewIntent方法。如果该Activity并不再栈中,那么会重新创建一个任务栈,然后创建该Activity的实例后放入栈中。

SingleInstance:

         单实例模式,这种模式具备singleTask模式的全部特性,此外这种模式的Activity只能单独的位于一个任务栈中。即是如果将要启动的Activity是singleInstance模式,当该Activtiy启动后,系统会为它创建一个新的任务栈,然后A单独在这个任务栈中。后续的请求均不会创建新的Activity,除非该任务栈被系统销毁了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值