一、Activity的概要说明
我看过Activity的源码,Activity类注释大概是这样解释的:几乎所有的Activity都是与用户交互用的,我想用了一个几乎的意思应该是排除一些纯展示界面吧,因此Activity类主要是创建一个窗口来展示我们所做的UI界面,我们用的时候通常是全屏来展示UI界面的,但是Activity也有一些其他的用途,比如当做一个悬浮的视窗来用(在清单文件里更改Activity的主题)。
二、Activity的四种LaunchMode
设置:<activity android:name=".MainActivity" android:launchMode="standard" />
1、Standard:把Activity设置成Standard启动模式的意思是:比如当前显示的界面是FirstActivity,此时任务栈里就会有一个FirstActivity实例,接下来由FirstActivity跳转到FirstActivity,此时任务栈里就会生成一个新的FirstActivity实例,如果再次跳转到FirstActivity,任务栈里又会多出第二个FirstActivity实例,到现在为止任务栈里一共有三个FirstActivity实例,这时候我们连着按两次Back键,才会返回到第一个FirstActivity,如下图所示:
2、SingleTop:比如当前界面显示的界面是FirstActivity,此时任务栈里就会有一个FirstActivity实例,接下来由FirstActivity跳转到FirstActivity,这个时候系统发现在栈顶处已经存在一个FirstActivity实例了,所以就不会再新建FirstActivity实例了(如第一个图),否则就会在栈顶新建它的实例(如第二个图),从SecondActivity跳转到FirstActivity的时候,发现虽然任务栈里存在FirstActivity实例,但是位置不在栈顶,所有就新建了一个FirstActivity实例。
3、SingTask:比如我们当前显示的界面是FirstActivity,此时任务栈里就会有一个FirstActivivity实例,接下来由FirstActivity跳转到SecondActivity,系统发现任务栈里还没有SecondActivity实例,于是就会新建一个SecongActivity实例放于栈顶(如下图的上半部分),接下来我们由SecondActivity跳转到FirstActivivity,系统会发现在栈里已经存在FirstActivivity实例了(不管位置在哪),所以就不会在栈里新建FirstActivity实例的,同时还会把FirstActivity实例上面的对象全不都弹出栈(如下图的下半部分)。
4、singleInstance:这种启动模式的特别之处在于会启动一个新栈,一个栈存放一类(类别)的实例,就好比动物园里,好多只老虎有自己的园子,好多只猴子又有自己的园子,这里的老虎猴子就是不同的Activity,每一只老虎猴子就是个自Activity的实例。
比如说我们当前显示的界面是FirstActivity,此时栈里就会有一个FirstActivivity实例,接下来由FirstActivity跳转到SecondActivity,这个时候就会出现一个新栈来存放SecondActivity实例的,按一下Back键又回到了第一个栈里(如下边第一个图)。假如我们从FirstActivity跳转到SecondActivity,又从SecondActivity跳转到FirstActivity,这个时候在FirstActivity所在的栈里又会创建一个新的FirstActivity实例放在栈顶,接下来我们按两次Back键,并没有退出程序,而是回到了SecondActivity(如下边第二个图)。