Android开发学习之路——Activity Task和Back Stack分析
一、概念
(1)首先需要理解Task和Back Stack的含义:
Task,翻译过来就是任务,指的是Activity的集合或者容器,而这个集合/容器呢,则是使用一个栈来进行管理的,这个栈称为Back Stack,栈中Acitvity的顺序则是遵循后进先出的原则,而栈中Activity的顺序是按照他们被打开的顺序来依次存放的。一般,我们只能从栈顶移除或者添加新的Activity,而栈中你的Activity的顺序是固定的,但是也有一些方法可以改变栈内的Activity的顺序,也就是后面要介绍的launchMode和Intent的Flags。
总结:Task(任务) Activity的容器或者集合,通过Back栈来管理。而栈中Activity的顺序是按照启动Activity的先后来决定的,但是我们可以通过launchMode和Flags来改变顺序。
(2)为什么会选择Task和 Back Stack来管理Activity而不是其他的数据结构呢?(这里就需要分析Task和Back Stack的特性)
实际上一个应用包含很多个Activity,而每个Activity都对应了特定的功能,用于给用户操作,而不同的Acitivity可以通过Intent来互相启动。比如说从点击一个app图标开始,首先是启动的Activity,然后主界面Activity,然后点解头像,开始注册Activity,然后登录Activity。如下图 1:
图 1
在这一过程中该应用一共产生了四个Activity实例,那么如果此时我按返回,应该依次移除上层的Activity直到退出。这里思考,如果是你,你首先想到的是什么数据结构来保存这些?(如果学过数据结构的话,你会很敏感的知道这个很符合栈的结构特点)
除此意外,一个Acitivty还可以去启动其他应用程序中的Acitivity。比如,在微信聊天中,如果对方给你发一个网址链接,你点击后会在微信打开这个链接,但是这个时候你选择从浏览器打开,就会进入浏览器,当你看完这个链接后按返回退出浏览器,此时你会发现又会回到微信界面中。
因此无论是同一个应用的Acitivity还是不同应用的Activity,Android都提供了一种Activity管理将他们有效合理的结合在一起。而Task和Back Stack刚好可以满足这一需求。
那么Task和Back Stack是如何管理Activity的呢?