您的位置:首页 > 其它

深究Activity启动模式

2016-07-27 11:50 162 查看
四种启动模式

* standard ,singleTop,singleTask,singleInstance *

1.standard

系统默认模式,每次启动一个Activity都会重新 创建一个新的实例,不管这个实例是否存在。被创建的是咧符合典型情况下的声明周期。 onCreate、onStart、onResume会被调用,一个任务栈可以有多个实例额,每个实例也可以属于不同的任务栈,谁启动这个Activity,那这个Activity就运行在启动它的那个Activity所在的任务栈中。注意,当我们用ApplicationContext去启动standard模式的Activity时候会 这是因为standard模式的Activity默认会进入启动它的Activity所属的任务栈中,非Activity类型的Context(如 ApplicationContext)并没有所谓的任务栈,所以会报错。解决问题就是为待启动的Activity指定FLAG_ACTIVITY_NEW_TASK,

2.singleTop 栈顶复用模式。

这种模式下,如果新Activity已经位于任务栈的栈顶,那么Activity不会被重新创建,同时它的 onNewIntent方法会被回调。通过此方法,我们可以去除当前请求的信息,而onCreate,onStart不会被系统调用。

3.singleTask 栈内复用模式

这是一种单实例模式,这种模式下,只要activity在一个栈中存在,那么多次启动此activity都不会创建实例,而是回调onNewInten。forexample,当一个觉又singleTask模式的Activity请求启动后,比如Activity A,系统首先会寻找是否存在A想要的任务栈,如果不存在,就重新创建一个任务栈,然后创建A的实例后放入栈中,如果存在A所需要的任务栈,要看A是否在栈中有实例存在,如果存在系统会把A调到栈顶(singleTask默认具有clear top效果,A上面的全部出栈),并调用它的onNewInten方法,如果不存在就创建A的实例并把A压入栈中 关于Android任务栈需要学习,下面会讲,这里暂且按下不表。

4.singleInstance:单实例模式,是一种加强的singleTop模式。除了具有singTop所有的特性外,还加强了一点,就是具有此种模式的Activity只能单独文艺一个任务栈中,具有此种模式的Acitivity 启动后,系统会为他创建一个新的任务栈,然后A独自在这个新的任务栈中,由于栈内复用的特性,后续的请求均不会创建新的Activity,除非这个独特的任务栈已经被系统销毁了。

上文多次提到所需的任务栈,什么是Activity所需要的任务栈呢,需要提及一个重要的参数TaskAffinity,翻译为任务相关性,这个参数表示了一个Activity所需要的任务栈的名字,默认情况下,所有Activity所需的任务栈的名字为应用的包名。当然,我们可以为每个Activity都单独指定TaskAffinity属性,这个属性值不能和包名相同,否则就相当于没有指定,TaskAffinity属性主要和singleTask启动模式或者allowTaskReparenting属性配对使用,在其他情况下没有意义,

另外,任务栈分为前台任务栈和后台任务栈,后台任务栈中都 Acitivity位于暂停状态,用户可以通过切换将后台任务栈再次调到前台。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: