activity启动模式探究

来源:互联网 发布:使命召唤ol雷切宏数据 编辑:程序博客网 时间:2024/05/17 22:09

首先说说任务栈:分为前台任务栈和后台任务栈,顾名思义,前台任务栈才能和用户交互,所以如果你要启动一个在后台任务栈已经存在实例的activity,要么在当前的前台任务栈上重新创建activity,要么就把整个后台任务栈放到前台任务栈之上,再把这个要启动的activity上方的其它activity清空出栈,具体要看这个activity的启动模式是什么。
众所周知,activity有四种启动模式:
1.standard

不管当前任务栈(先进后出,activity就存放于此)是否有这个activity的实例,都会重新创建(以这个模式启动的activity会自动进入启动它的activity所在的栈,所以如果你用application的context来启动activity就会报错,原因是application压根没有所谓的任务栈)

2.singleTop

当要启动这个模式的activity时,会检查当前任务栈的栈顶,如果存在就不会重新创建实例。

3.singleTask

这个最复杂,以这个模式启动的activity,可以在配置文件中设置它想要在哪个任务栈中启动,如android:taskAffinity=”com.wzd.task1”,第一次启动时这个任务栈肯定不存在,故会先创建这个任务栈。如果不指定,默认为application的taskaffinity(默认任务栈名为应用的包名),也就是不会重新创建任务栈。

指定了与这个activity关联的任务栈以后,当启动这个activity时,系统就会先看有没有这个任务栈,没有就创建任务栈再把这个activity压入栈中,最后把这个任务栈移到最上面来,把其他任务栈压下去。如果有这个任务栈的话,检查是否有这个activity的实例,有的话就清空这个activity上方的其他activity,这样这个任务栈的栈顶就是这个activity了,再把这个任务栈移到最前面来,把其他任务栈压下去。如果没有就创建这个activity压入栈顶。

4.singleInstance

以这种模式启动的activity会单独的存在于一个新的任务栈中。

0 0
原创粉丝点击