启动模式
Activity
的管理是采用任务栈(类似于集合)的形式
-
Android
任务栈又称为Task,它是一个栈结构,具有后进先出的特性,用于存放我们的Activity
组件。 - 每次打开个新的
Activity
或者退出当前Activity
都会在任务栈的中添加或者减少一个Activity
,因此一个任务栈包含了一个activity
的集合,android
系统可以通过Task有序地管理每个activity
,并决定哪个Activity
与用户进行交互:只有在任务栈栈顶的activity
才可以跟用户进行交互。 - 在退出应用程序时,必须把所有的任务栈中所有的
activity
清除出栈时,任务栈才会被销毁。 - 一个App中可能不止一个任务栈,某些特殊情况下,单独一个
Actvity
可以独享一个任务栈。还有一点就是一个Task中的Actvity可以来自不同的App,同一个App的Activity也可能不在一个Task中。
Activity
启动模式有如下几种
- 标准模式(
standard
) - 栈顶复用模式(
singleTop
) - 栈内复用模式(
singleTask
) - 单例模式(
singleInstance
)
标准模式(standard)
- 启动一次
Activity
就会创建一个新的Activity
实例并且处于栈顶(启动该Activity
的那个栈)
栈顶复用模式(singleTop)
- 如果启动的
Activity
处于栈顶,就直接重用该实例(调用onNewIntent()
、不调用onCreate()
和onStart()
) - 如果启动的
Activity
不在栈顶,就创建新的实例
栈内复用模式(singleTask)(在同一个栈内中的基础上)
- 栈内已经存在该
Activity
的实例,就移除该实例上面所有Activity
- 不存在,就创建新的实例
单利模式(singleInstance)
- 启动
Activity
是就创建一个新的栈,再创建Activity
实例放进去
用于多个app共享一个
Activity
实例
设置启动模式
- 清单文件里面Activity添加属性,默认为标准模式
android:launchMode="启动模式"
- 通过Intent设置
Intent inten = new Intent (context,ActivityB.class);
intent,addFlags(Intent,FLAG_ACTIVITY_NEW_TASK);//启动模式
startActivity(intent);
-
FLAG_ACTIVITY_SINGLE_TOP
//singleTop -
FLAG_ACTIVITY_NEW_TASK
//standard