全网最全Android开发笔记 android activity启动流程


一.先理解栈的概念(放置Activity实例的容器)
1.Task(线性表)
任务栈Task , 用来放置Activity实例的容器 , 先进后出 , 主要有2个基本操作:压栈和出栈 , 其所存放的Activity是不支持重新排序的 , 只能根据压栈和出栈操作更改Activity的顺序 。
2.app启动时 , 系统会为它默认创建一个对应的Task , 用来放置根Activity
ps: Activity之间可以相互启动 , 当前应用的Activity可以去启动其他应用的Activity(相机),那么就是说栈的功能可以把其它app的activity加入到自己app的栈里.
所以Task可以理解为负责管理所有用到的Activity实例的栈,但是.android5.0之后 跨进程调用activity,这个activity会被放入到一个新的栈中 。
二.启动模式(只能根据压栈和出栈操作更改Activity的顺序,所以是启动模式是以哪种姿势入栈)
通过在AndroidManifest文件中的属性andorid:launchMode来设置或者通过Intent的flag来设置
1.standard(常规姿势入栈)
默认模式 。在这个模式下 , 都会默认创建一个新的实例 。因此 , 在这种模式下 , 可以有多个相同的实例 , 也允许多个相同Activity叠加 。应用场景:绝大多数Activity 。
2.singleTop(栈顶复用姿势入栈)==FLAG_ACTIVITY_SINGLE_TOP
栈顶复用模式 , 如果要开启的activity在任务栈的顶部已经存在 , 就不会创建新的实例 , 而是调用 o

    推荐阅读