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出现在任务栈中如:任务栈图六
当点击【启动SecondActivity(Button2)】的时候,任务栈中出现SecondActivity如:任务栈图七
现在应用程序中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出现在任务栈中如:任务栈图十
这个时候MainActivity界面出现,如果这时我们再次点击【启动SecondActivity(Button2)】那么任务栈中SecondActivity将出现任务栈图十一。
现在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出现在任务栈中如:任务栈图十六
如果我们再次点击【启动MainActivity(Button1)】任务栈中MainActivity出现如:任务栈图十七
如果这个时候我们点击了【启动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