Android Activity详解-启动模式
启动模式介绍
Android 内部通过任务栈 Task 来管理 Activity 实例,栈结构是一种后进先出的结构,主要有两种操作:压栈和出栈,App 启动时会默认创建一个任务栈 Task 来保存管理 Activity 实例,在启动新的 Activity 时,将新的 Activity 实例进行压栈操作,显示的 Activity 会存放在栈顶,当用户点击后退键时,就会将栈顶的 Activity 进行出栈操作,栈顶后的 Activity 就会显示。
启动模式详解
为了实现一些 Activity 的特殊处理,Android 为我们提供了4种启动模式
standard(标准启动模式)
默认启动模式,每次启动 Activity 都会创建一个 Activity 实例,Activity 实例依附在启动的的 Activity 栈中,ApplicationContext没有任务栈,采用标记位 FLAG_ACTIVITY_NEW_TASK 来创建一个任务栈
使用场景: 大部分 Activity 都会使用此启动模式
singleTop(栈顶复用模式)
如果以 singleTop 模式启动的 Activity 位于任务栈的栈顶,那么再次启动这个 Activity 时,会复用当前的实例,不创建新的实例,同时回调 onNewIntent() 方法将 Intent 对象传递到这个实例
使用场景:适于多消息下的同一页面
singleTask(栈内复用模式)
如果 Activity 以该模式启动,那么在任务栈中只能有一个该 Activity 的实例,如果任务栈不存在,则创建该实例压入栈顶;如果存在该实例,会销毁当前 Activity 任务栈之上的所有 Activity 实例,最终让该 Activity 实例位于栈顶,同时回调 onNewIntent() 方法将 Intent 对象传递到这个实例
使用场景:程序入口点
singleInstance(单实例模式)
如果 Activity 以该模式启动,会单独创建一个任务栈,并且在任务栈中只能有这一个实例,再次启动时,会复用已有的任务栈和实例,同时回调 onNewIntent() 方法将 Intent 对象传递到这个实例
使用场景:适于应用的分离页面