Activity的启动模式
在清单文件(AndroidManifest.xml)文件中的activity节点里有个属性android:launchMode就是指定Activity的启动模式. 其默认为标准模式(standard), 以下是四种模式:
作用:影响activity在任务栈的顺序
1. 标准模式:standard
开启目标activity页面,系统会创建一个新的activity对象,使其位于应用程序任务栈的栈顶。并且将其压入任务栈栈顶,而不管这个Activity是否已经存在。Activity的启动三回调(onCreate()->onStart()->onResume())都会执行。
应用场景:默认情况
2. 单一顶部模式:singleTop
开启目标activity,系统回去任务栈的栈顶查找有没有这个activity实例对象,如果有则复用栈顶的activity;所以它的启动三回调就不会执行,同时Activity的onNewIntent()
方法会被回调.如果Activity已经存在但是不在栈顶,那么作用与standard模式一样.如果没有则创建
常见应用:系统浏览器保存书签页
3. 单一任务模式:singleTask
开启目标activity,系统回去整个任务栈查找,如果找到了这个activity,就清除这个activity上面的所有activity;如果没有找到,就在栈顶创建一个新的activity实例对象
系统应用:浏览器
4. 单一实例模式:singleInstance
开启目标activity,系统为这个activity单独创建一个任务栈。这种模式的Activity只能单独位于一个任务栈内,由于栈内复用的特性,后续请求均不会创建新的Activity,除非这个独特的任务栈被系统销毁了
系统应用:系统的来电界面
Activity表签
android:launchMode="singleInstance"
透明界面
android:theme="@android:style/Theme.Translucent"
Activity的堆栈管理以ActivityRecord为单位,所有的ActivityRecord都放在一个List里面.可以认为一个ActivityRecord就是一个Activity栈