一、前言
在Android开发中,都需要从一个activity启动到另一个activity,而启动时就需要判断新的activity的启动模式。以前一直都不是特别了解这几个模式都是干啥的,只知道拿来用,网上的许多讲解感觉都是写了一大篇,理解起来比较费劲。今天详细讲解一下,如有不对的地方,请大家留言指正。
二、概述
activity有四重启动模式standard(默认),singleTop、singleTask、singleInstance。
1、standard
标准模式,也是系统默认模式,每次启动一个activity都会创建一个新的实例,会执行完整的activity流程。点击返回按钮时会按照点击的按钮原路返回,如有四个activity:A、B、C、D。点击顺序为:ABCCC,则按返回按钮后执行的顺序为CCCBA。
2、singleTop
栈顶复用模式,简单理解为就是如果一个activity重复点击,则只会有一个实例,不会执行ocreate方法,只会执行OnNewIntent回调。如点击顺序如下时:ABCCC,则按返回按钮后返回顺序为CBA。
3、singleTask
栈内复用模式:可以理解为只要是执行过的activity,当通过跳转再次跳转到该页面后不会重新创建,并且在它之后执行的activity都将销毁(默认)。如执行以下顺序ABCCCB,则返回顺序为BA。当中的三个CCC被销毁了。
4、singleInstance
单一实例模式,整个手机操作系统里面只有一个实例存在。不同的应用去打开这个activity 共享公用的同一个activity。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。这种模式的使用情况比较罕见,在Launcher中可能使用。或者你确定你需要使Activity只有一个实例。建议谨慎使用。
三、具体使用方法
1、在androidMainfest.xml中使用,在引用activity加入如下代码:
android:launchMode="singleTop"
2、在跳转到指定activity时,加入flags
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
3、常用Intent的标志
- Intent.FLAG_ACTIVITY_NEW_TASK: 功能和singleTask相同
- FLAG_ACTIVITY_SINGLE_TOP : 功能和singleTop相同
- FLAG_ACTIVITY_CLEAR_TOP : 启动的新的activity上方的所有activity都要出栈,可以和Flag_activity_new_task联合使用,
四、总结
在选择启动模式时:如果跳转页面深度较少,并且防止一个页面只需要返回一次就退出时,可以使用singleTop;如点击消息通知进入activity。如果点击层次足够深,多次跳转到相同页面,并且返回时希望当中点击的页面不出现时则使用SingleTask。