Android开发——活动的四种启动模式详解(七)

1.关于返回栈

安卓中每个活动的启动都需要先加入返回栈中,你现在看到的活动就是位于栈顶的活动。而我们每次启动一个新的活动,就会覆盖在原活动之上,而当我们点击Back键返回的时候,这个活动就会被销毁,栈中下面的活动就会重新显示出来。
在这里插入图片描述

2.活动的启动模式

(1)standard模式:

是活动默认的启动方式,在不进行显示指定的情况下,所有的活动都会自动使用这种启动模式,
在这里插入图片描述

在这里插入图片描述

运行程序 并且双击Button,logcat结果如上图。
可以得出结论:每点击一次按钮就会创建一个新的FirstActivity实例。此时返回栈中也会存在三个FirstActivity实例,所以需要连续点击三次Back键才能退出程序。
在这里插入图片描述

(2)SingleTop模式:

在SingleTop模式中, 会检查在返回栈栈顶是不是你要启动的活动,如果不是的话,会启动这个活动,如果是的话,他就不会启动,直接使用。所以SingleTop不会出现standard中的情况需要点击多次才能退出程序,它只需要点击一次就可以了。
在这里插入图片描述
在这里插入图片描述

不过当FirstActivity并没有在栈顶时候,再次启动FirstActivity还是会创建实例的。
比如:
FirstActivity:
在这里插入图片描述
SecondActivity:
在这里插入图片描述
logcat:
在这里插入图片描述
示意图:
在这里插入图片描述

(3)SingleTask模式:

这种模式是最智能的模式,系统会在你的返回栈中检查是否有你想启动的活动,有的话就直接推向栈顶,没有的话才回去创建。
举例:
AndroidManiFest中:
在这里插入图片描述
FirstActivity:
在这里插入图片描述
SecondActivity:
在这里插入图片描述
运行logcat中:
在这里插入图片描述

在SecondActivity中启动FirstActivity时,会发现返回栈中已经存在一个FirstActivity的实例,并且是在SecondActivity下面,于是SecondActivity会从返回栈中出栈,而FirstActivity会重新成为栈顶活动。因此FirstActivity中的onRestart()和SecondActivity中的onDestory()方法可以执行。现在返回栈中只有FirstActivity了,所以Back后会退出程序。

示意图:
在这里插入图片描述

(4)SingleInstance:

这种模式是最特殊的模式,这种模式是为了让不同的app之间可以共享同一个活动,如果你的app想让别的app调用你的某一个界面,就可以用这种模式,这种模式会为你想共享的界面单独创造出一个单独使用的返回栈,不会与别的返回栈共同使用。
FirstActivity:(打印了当前返回栈的id)
在这里插入图片描述
SecondActivity:(打印了当前返回栈的id,修改了按钮点击事件中的代码,用于启动ThirdActivity。)
在这里插入图片描述
ThirdActivity:(打印了当前返回栈的id)
在这里插入图片描述
logcat:
进入程序,在FIrstActivity界面点击按钮进入到SecondActivity,然后在SecondActivity中点击按钮进入到ThirdActivity
在这里插入图片描述
可以看出Second的不同于First Third,这就说明SecondActivity确实是存放在单独的返回栈中,而且这个栈只有SecondActivity一个活动。
然后我们按下Back,Third返回到了First,再按下Back,又返回到了Second,再按下Back退出程序。
在这里插入图片描述

1.由于FirstActivity和ThirdActivity是存放在同一个栈中的,当在ThirdActivity的界面按动Back,就会返回栈中出栈,那么FirstActivity就成了栈顶活动显示在界面上,也就出现了ThirdActivity直接返回到FirstActivity的情况。
2.然后在FIrstActivity按下Back,当前返回栈已空,于是就显示了另一个返回栈的栈顶活动,即SecondActivity。
3.再次按下Back所有返回栈已空,就退出了程序。

示意图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值