activity的四种启动模式

本文详细介绍了Android中Activity的四种启动模式:标准模式、singleTop、singleTask和singleInstance,并通过示例展示了不同模式下Activity在任务栈中的行为表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                   activity的四种启动模式

         在开始学习之前,我们必须知道一些事情

          ①:我们平常所说的 task stack(任务栈),是针对于activity而言的

          ②:任务栈其实就是一个后进先出的链表,记录和维护了当前开启的activity。

                  一般情况下,退出一个activity,就是把这个activity从任务栈栈顶移除.

          ③:如果栈顶空了,任务栈将会被回收,应用程序关闭,但,注意!! -- 进程其实还是存在的,等待其他任务进 

                入该线程.

标准模式】  ---  一般情况

        标准模式也是默认模式,在没有指定打开方式的时候默认使用标准模式

        我们来做个程序实验一下,首先我们做两个activity

        界面如下图:

        

        

         在配置文件中配置启动模式

        

         这时,我们点击的顺序为:第二个activity-->第一个activity-->第一个activity

         此时在任务栈中的情况为

        

              我们点击模拟器/真机的返回键,依次出现的界面依次为:

               第一个activity(点击前)-->第一个activity(点击一次)-->第二个activity(第二次点击)

               -->第一个activity(第三次点击)-->返回应用程序界面(第四次点击)             

              总结:每发送一个请求都会打开一个相应的activity,即使它已经重复,但依然要打开新的activity


singleTop】  ---  特殊情况

     singleTOP,这种模式和标准模式的区别在于:当你发起一个开启activity的请求时,它会第一时间去任务栈的最顶端查找,如果你要打开的是activity和顶栈中的activity一致时,它不会再次开启,值得注意的是,只要你请求打开的不是顶栈中的activity它都会开启一个新的activity,不管它之前是否打开过,是否存在

         依然是上个案例中用到的例子,这次我们把启动模式设置为下图所示:

         

      此时我们打开应用,点击Bution的顺序为

      第二个activity --> 第一个activity --> 第一个activity

      那么,在任务栈中的为:

      

          当我们连续两次点击activity01时,它只会开启一个

          我们点击模拟器/真机的返回键,依次出现的界面依次为:

               第一个activity(点击前)-->第二个activity(第一次点击)

               -->第一个activity(第二次点击)-->返回应用程序界面(第三次点击)


 singleTask】  ---  特殊情况

     singleTask  ---  它的作用是,当你发送一个启动activity A的请求时,它会先去任务栈中去查找是否存在你要开启的activity A,如果有,清空这个任务栈中activity A上面的所有的activity,复用activity A

     现在我们把配置文件中的activity启动模式改为

     

   我们发布项目,然后打开app,点击Button的顺序为:

      第二个activity -->  第一个activity 

      那么此时在任务栈中的情况为:

     

         所以我们点击一次后退键即可退出程序


  singleInstance】  ---   极特殊

    singleInstance  ---  它是一种及其特殊的启动方式,使用该启动模式的activity将会独自创建一个任务栈,这个任务栈中只存放一个该activity的实例,根据用户点击的顺序对所有的任务栈进行排序

       也就是说:如果activity01被开启,把activity01所在的任务栈放在最前面,如果此时又开启了新的activity02,那么activity02所在任务栈会被放置在activity01前面

     

       我们来举个例子,现在我们把配置文件中activity的启动模式改为下图所示:

     

         那么,我们将项目部署下,打开app --- > 进入activity01界面

         点击进入第一个activity,我们发现页面并没有任何反应,而当我们点击进入第二个activity,此时应用的反应如同开启了一个新的app似的,很明显第一个activity的界面先是缩小,然后activity02出现。

        此时的任务栈中的情形如图:

       

             若我们再点击进入第一个activity,

            

           也就是说,你想看到谁,谁就被放在前方,好似插队一般,把刚点击的activity放在队伍的最前方

           不管点击几次Button我们只需要点击两次返回,即可关闭程序

         

            以上就是我对activity4种启动模式的理解,希望可以帮到你

            欢迎转载,请注明出处,谢谢

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值