Android Activity 4种启动模式

来源:互联网 发布:装饰公司软件 编辑:程序博客网 时间:2024/06/03 14:59

Android的Activity一共有4中启动模式分别是:standard、singleTop、singleTask、singleInstance。

在介绍这四种模式之前先说下Android中的任务栈(TaskStack)的概念:栈大家都知道,是一种后进先出的数据结构。什么是后进先出呢:

下图模拟Android程序界面:

MainActivity程序界面模拟这是MainActivity(TextView)启动MainActivity(Button1)启动SecondActivity(Button2)

SecondActivity程序界面模拟这是SecondActivity(TextView)启动MainActivity(Button1)启动SecondActivity (Button2)

下图模拟任务栈。

当Android程序启动的时候,MainActivity最先出现,所以任务栈中它是第一个如:任务栈图一

                            任务栈图一

                            Main ①

 



当点击了【MainActivity程序界面模拟】中的【启动MainActivity(Button1)】的时候,MainActivity再次出现在了任务栈中如:任务栈图二

                           任务栈图二

                           Main ②                          Main ①

 



当点击了【MainActivity程序界面模拟】中的【启动SecondActivity (Button2)】的时候,SecondActivity出现在了任务栈中如:任务栈图三

                           任务栈图三

  Second ③                          Main ②                          Main ①

 




任务栈中SecondActivity是最后进入的,所以显示在界面上的也是它,当我们点击返回键的时候,也是它最先被销毁。(后进先出)如:任务栈图四

                           任务栈图四

Second ③                          Main ②                          Main ①

 



当然再次点击返回键,任务栈中的MainActivity也被一一销毁,直到退出应用程序,返回到主屏幕。如:任务栈图五

                           任务栈图五

Second ③                          Main ②                           Main ①

 



任务栈已经讲完了,同时这也是Activity种的standard模式。

接下来开始说下其他三种模式

singleTop

同样是前面的程序界面;

MainActivity程序界面模拟这是MainActivity(TextView)启动MainActivity(Button1)启动SecondActivity(Button2)

SecondActivity程序界面模拟这是SecondActivity(TextView)启动MainActivity(Button1)启动SecondActivity (Button2)
当启动应用程序的时候,Mainactivity出现在任务栈中如:任务栈图六

             任务栈图六

                            Main ①

 



当点击【启动SecondActivity(Button2)】的时候,任务栈中出现SecondActivity如:任务栈图七

            任务栈图七

                           Second ②                          Main ①

 



现在应用程序中SecondActivity界面出现,如果这时我们再次点击启动SecondActivity(Button2)】那么任务栈中Second将不会再次出现,依旧停留在当前界面,而如果点击了【启动MainActivity(Button1)】那么任务栈中MainActivity将出现,如任务栈图八。

            任务栈图八

 Main ③                          Second ②                          Main ①

 



这个时候MainActivity界面出现,如果这时我们再次点击启动SecondActivity(Button2)那么任务栈中SecondActivity将出现,如任务栈图九。任务栈图九Second ④Main   Second ②Main ①现在SecondActivity出现,如果我们再次点击启动SecondActivity(Button2)】任务栈中Second将不会出现,现在应该明白了吧,只要Second在最上面,那么任务栈中就不会出现该Activity,这就是singleTop。

singleTask

同样是前面的程序界面;

MainActivity程序界面模拟这是MainActivity(TextView)启动MainActivity(Button1)启动SecondActivity(Button2)

SecondActivity程序界面模拟这是SecondActivity(TextView)启动MainActivity(Button1)启动SecondActivity (Button2)


当启动应用程序的时候,Mainactivity出现在任务栈中如:任务栈图十

             任务栈图十

                            Main ①

 



这个时候MainActivity界面出现,如果这时我们再次点击启动SecondActivity(Button2)】那么任务栈中SecondActivity将出现任务栈图十一。

             任务栈图十一

 Second②                          Main ①

 



现在SecondActivity出现,如果我们再次点击启动MainActivity(Button1)】任务栈中MainActivity出现如:任务栈图十二

            任务栈图十二

 Main Second②                          Main ①

 



再次点击启动MainActivity(Button1)】任务栈中MainActivity出现如:任务栈图十三


任务栈图十三Main④Main   Second ②Main ①现在可以看到我们的SecondActivity是在任务栈的第二个位置的,如果这个时候我们再次点击
启动SecondActivity(Button2)】会出现什么情况呢,请看任务栈图十四

任务栈图十四Main④Main   Second ②Main ①
是不是很诧异,没有在任务栈中新创建一个Second而是把第SecondActivity上面的所有Activity都销毁了,把SecondActivity置于任务栈的最上面。如果这个时候点击返回键的话任务栈里面的结构应该是什么样呢,如任务栈图十五
任务栈图十五Second②Main①
是不是和你想的一样呢,返回到了MainActivity界面,再次点击返回键则退出应用程序。这就是singleTask

singleInstance

同样是前面的程序界面;

MainActivity程序界面模拟这是MainActivity(TextView)启动MainActivity(Button1)启动SecondActivity(Button2)

SecondActivity程序界面模拟这是SecondActivity(TextView)启动MainActivity(Button1)启动SecondActivity (Button2)


当启动应用程序的时候,Mainactivity出现在任务栈中如:任务栈图十六

             任务栈图十六

                            Main ①

 



如果我们再次点击【启动MainActivity(Button1)】任务栈中MainActivity出现如:任务栈图十七

            任务栈图十七

Main②                          Main ①

 




如果这个时候我们点击了【启动SecondActivity (Button2)】会出现什么情况呢,猜测一下,和前面的会有少许的不同。如任务栈图十八
任务栈十八(该图可以看成两个任务栈因为不能有两个表格在一行,所以弄了两列)                         新任务栈                              原任务栈                                   Main②Second①Main①是不是和你想的不一样呢,这个时候Android是新创建了一个任务栈,而不是在原来的任务栈里面添加了一个Second。这个时候,会有两个任务栈的存在,新的任务栈会在最前面,也就是Second所在的任务栈,而原来的任务栈则在后面,你是看不到的,如果这个时候我们点击了【启动SecondActivity (Button2)】,那么新的任务栈中也不会再次出现Second的,保持原来的不变。而如果点击了【启动MainActivity(Button1)】,那么将会切换到原任务栈,并在任务栈中新增一个Main,如任务栈图十九:
任务栈图十九新任务栈原任务栈 Main③     Main②Second①Main①
这个时候我们回到了,原任务栈也就是MainActivity所在的界面,如果这个时候我们点击了【启动SecondActivity (Button2)】,那么新的任务栈中也不会再次出现Second的,保持原来的不变。但是我们如果点击了
启动MainActivity(Button1)】,那么原任务栈还是会新增一个Main,如任务栈图二十

任务栈图二十新任务栈原任务栈 Main④ Main③ Main②SecondMain①这个时候依次点击返回键,那么原任务栈将依次销毁。当最后一个Main被销毁以后,那么是不是就退出了应用程序呢,当然不是,请看图二十一

任务栈图二十一新任务栈原任务栈 Main④ Main③ Main②SecondMain①当最后一个Main被销毁以后,原任务栈也就不存了,系统会切换到新任务栈也就是SecondActivity所在的任务栈,如果在这个界面点击返回,那么该应用程序才最终被销毁。
好了,四个启动模式都已经讲完了,我是新手该文章仅作笔记,如有错误请指正。谢谢。
项目代码:http://download.csdn.net/detail/jycomputer/9250125


0 0