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所有返回栈已空,就退出了程序。
示意图: