Activity的四种启动模式

简介: 简介:我们一个程序会存在不同的Activity,也会存在许多实例,这些实例就会进入任务栈中,任务栈采用“后进先出”的算法,例如:我们使用手机,打开QQ,在QQ界面进入一个聊天界面,此时存在两个Activity实例,假设我们按一下back键我们将回到QQ主界面,在按一下back键我们将回到屏幕主界面,这就是“后进先出”。


简介:



我们一个程序会存在不同的Activity,也会存在许多实例,这些实例就会进入任务栈中,任务栈采用“后进先出”的算法,例如:我们使用手机,打开QQ,在QQ界面进入一个聊天界面,此时存在两个Activity实例,假设我们按一下back键我们将回到QQ主界面,在按一下back键我们将回到屏幕主界面,这就是“后进先出”。


Activity的四种启动模式

image.png


standard:

系统默认使用此启动模式,特性:无论实例存在与否,每启动一次就创建一个实例,如下图所示

image.png


singleTop:

此启动方法分为两种情况。

一:例如一个任务栈中存在ABCD四个实例,且在D中启动一个启动方法为singleTop的实例D,因为此时任务栈中已经存在D,因此系统会回调OnNewIntent()方式。任务栈中的实例依然为ABCD。

二:依旧任务栈中存在ABCD四个实例,在D中启动一个启动方法为singleTop的实例B,因为B已经存在任务栈中,但并为在栈顶,因此想要启动B,必须创建一个实例B位于栈顶,但之前存在的实例B并未改动,因此任务栈中为ABCDB。

下图为第一种情况:


image.png


singleTask:

此模式与singleTop模式举的第一个例子一样,但如果想在ABCD任务栈中启动一个启动方法为singleTask的实例B,因为singleTask具有clearTop,所有会把比实例B前面的实例清除掉,所有此时任务栈中只存在AB。如下图所示:

image.png



singleInstance:

是singleTask的增强版,具有它的所有特性,还具有用此启动模式启动的activity只能单独处于一个任务栈。

说了四种启动模式,接下来介绍两种方法在哪里设置启动模式,一种是在清单文件中添加,一种是动态添加。

我们先介绍第一种


一:

我们可以看到有四种启动模式可供选择


image.png

image.png


二:

Intent intent = new Intent(); intent.setClass(this,MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);//设置启动模式 startActivity(intent);

优先级:如果两种方式同时存在,我们以设置标志位为优

Activity常用的Flags:

Intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//指定singleTask模式,与在AndroidManifest.xml中指定android:launchMode"singleTask"效果相同
Intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
//指定singleTop模式,与在AndroidManifest.xml中指定android:launchMode"singleTop"效果相同
Intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//具有这个标志的Activity启动时,在同一个任务栈中所有位于它上面的Activity都要出栈,一般会和singleTask模式一起出现,可以理解为我们举例的singleTask第二个例子
Intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
//具有这个标志的Activity不会出现在历史的Activity列表中,它等同于在AndroidManifest.xml中指定android:excludeFromRecents="true"


相关文章
|
4月前
|
XML 监控 Android开发
Activity详解2
Activity详解
67 1
|
4月前
|
存储
Activity详解1
Activity详解
52 0
|
4月前
|
前端开发 Java Android开发
Activity
Activity
43 0
|
Android开发
Android 中Activity的四种启动模式
Android 中Activity的四种启动模式
206 0
|
传感器 存储 定位技术
Activity初学乍练
Activity是一个应用程序的组件,他在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作,比如打电话,照相,发送邮件,或者显示一个地图!Activity可以理解成一个绘制用户界面的窗口,而这个窗口可以填满整个屏幕,也可能比屏幕小或者浮动在其他窗口的上方!
67 0
|
Java 调度 Android开发
Activity登堂入室
Activity调用startActivity后最后会调用attach方法,然后在PolicyManager实现一个Ipolicy接口,接着实现一个Policy对象,接着调用makenewwindow(Context)方法,该方法会返回一个PhoneWindow对象,而PhoneWindow是Window的子类,在这个PhoneWindow中有一个DecorView的内部类,是所有应用窗口的根View,即View的老大,直接控制Activity是否显示(引用老司机原话..),好吧,接着里面有一个LinearLayout,里面又有两个FrameLayout他们分别拿来装ActionBar和Cus
95 0
|
XML Java Android开发
第二讲 Activity详解
第二讲 Activity详解
184 0
第二讲 Activity详解
|
Java Android开发
Android Activity的四种启动模式
Android Activity的四种启动模式
1088 1
Android Activity的四种启动模式
|
Java Android开发
Activity的四种启动模式
Android的冷门知识,大家有兴趣可以了解了解
178 0
|
Android开发
Activity四种启动模式
Activity四种启动模式