##1.任务栈介绍
在Android中,任何Activity都被放在某一个任务栈中,Android通过任务栈来管理Activity的启动和关闭次序。例如:在关闭当前Activity后,系统可以根据任务栈中的记录来显示前一个Activity;通过启动模式和任务栈,可以判断是复用旧的Activity实例还是创建新的实例。
同一个任务栈中可以包含不同APP的Activity,任务栈更像是从用户使用角度来组织管理Activity的一种方式,从用户角度来看,他按顺序打开一堆APP的页面,这些页面互相跳转,他点back键返回,就回到上一个页面,用户并不关心这些页面在底层到底属于哪些APP。
虽然同一个任务栈中可以包含不同APP的Activity,但是这些Activity仍然运行在各自APP对应的进程中。Activity运行在哪个进程是一个维度,任务栈是另一个维度,任务栈主要针对的是这些Activity的使用流程顺序。
用户最初是从桌面(启动器页面)开始,点击启动某个应用,启动了其对应任务栈,然后各种启动、关闭、切换操作,实质上对应的是各种任务栈以及其中Activity的创建、销毁和切换。点击Home键时,切换到桌面,当前Activity切换到后台,并未被销毁。
从桌面打开一个应用时,会开启新的任务栈,默认与当前包名相同,把APP首个打开的Activity放入其中。
当从一个App使用Standard或SingleTop模式调用另一个APP的Activity时,并不会新建任务栈,而是会把Activity放入当前任务栈。
每当点击“Home”键时,就会切换到桌面Activity(启动器launcher Activity),这是系统提供的一个Activity,它独立占据着一个任务栈,效果比较像像单例模式。每次从桌面启动App都会打开新的任务栈,每次点击Home键都会跳转回桌面Activity,而原来的前台任务栈切换到后台。