Android Activity 4种启动模式

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所在的任务栈,如果在这个界面点击返回,那么该应用程序才最终被销毁。
好了,四个启动模式都已经讲完了,我是新手该文章仅作笔记,如有错误请指正。谢谢。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值