您的位置:首页 > 其它

activity的启动模式详解

2018-02-27 15:49 274 查看
在默认情况下,当我们启动activity的时候,系统会创建一个实例并放入任务战中,任务栈是一种后进先出的结构。
目前有四种启动模式:standard,singleTop,singleTask,singleInstance
(1)standard:标准模式,如果不特殊申明,这也是系统的默认模式。每次启动一个activity都会重新创建一个新的实例,不管这个实例是否在任务栈中存在。在这种模式下,谁启动了这个activity,那么这个activity就在谁的栈中。比如activity A启动了activity B(标准模式),那么B就会进入A所在的任务栈中。
特别注意:当我们使用applicationContext去启动standard模式的activity的时候会报错,这是因为standard模式的activity默认会进入启动它的activity所属的任务栈中,但是由于非activity类型的context并没有任务栈,所以报错。解决的方法为为待启动的activity添加一个标记位。
(2)singleTop:栈顶复用模式。如果待启动的新的activity已经位于任务栈的栈顶,那么activity不会被重新创建,同时它的onNewIntent方法会被回调。这个activity的onCreate和onStart不会被系统调用。如果新的activity在任务栈中但不是栈顶,那么还是会被重新创建一个。
(3)singleTask:栈内复用模式。如果待启动的activity存在于任何一个栈中,那么都不会重新创建实例,如果不存在,则创建一个新的栈,并将待启动的activity放入栈中。
(4)singleInstance:单实例模式。这种模式的activity只能单独的位于一个任务栈中。如果启动时任务栈中没有这个activity,则创建一个新的任务栈并放入。如果有,则类似于栈内复用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息