当APP开始运行时,系统会为每一个APP会启动一个LINUX进程和一个主线程。而主线程中会运行一个任务栈,当Activity实例创建后就会放入任务栈中。

启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置。

启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;

讲解启动模式之前,有必要先讲解一下“任务栈”的概念;
任务栈概念类似于数据结构中的栈,遵循着FILO的原则。

在android中,每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序;比如Activity1–>Activity2–>Activity3,则任务栈为:

Android四种启动模式_第1张图片

四种启动模式:
(1)standard:每次启动一个Activity时(startActivity),都会创建Activity实例,并放入任务栈;

Android四种启动模式_第2张图片

(2)singleTop:如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;

Android四种启动模式_第3张图片

(3)singleTask:如果要激活的Activity实例在任务栈中已经存在,则不需要创建,只需把该Activity以上的Activity实例都去除,并调用该实例的newInstance()方法重用该Activity,使该实例处於栈顶位置,目的就是保持栈中相同的Activity实例只有一个,不存在重复的实例;

Android四种启动模式_第4张图片

(4)singleInstance:全局单例模式

在此种加载模式下,无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例且会用一个全新的Task栈来装载该Activity实例.

当系统采用singleInstance模式加载Activity时,又分为以下两种情况:

(1)如果将要启动的Activity不存在,那么系统将会先创建一个全新的Task,再创建目标Activity实例并将该Activity实例放入此全新的Task中

(2)如果将要启动的Activity已存在,那么无论它位于哪个应用程序,哪个Task中;系统都会把该Activity所在的Task转到前台,从而使该Activity显示出来

举例:
将Activity压入一个新建的任务栈中。例如:Task栈1的情况为:A B C。C通过Intent跳转到D,而D的Launch mode为singleInstance,则将会新建一个Task栈2。此时Task栈1的情况还是为:A B C。Task栈2的情况为:D。此时屏幕界面显示D的内容,如果这时D又通过Intent跳转到D,则Task栈2中也不会新建一个D的实例,所以两个栈的情况也不会变化。而如果D跳转到C,则栈1的情况变成了:A B C C,因为C的Launch mode为standard,此时如果再按返回键,则栈1变成:A B C。也就是说现在界面还显示C的内容,不是D。

更多相关文章

  1. Activity 四种启动模式详细介绍
  2. android 启动模式的坑
  3. Android 面试题(4):谈谈 Activity 的启动模式
  4. Android的Activity加载方式实例分析
  5. Android 首选网络模式默认值的修改方法
  6. Android的状态机模式StateMachine与State
  7. Android中Json应用实例介绍
  8. Android的四种启动模式(launchModel)
  9. Android项目中使用MVP模式

随机推荐

  1. android:EditText控件imeOptions属性
  2. ionic android打包
  3. 收到短信了,我该做点什么?
  4. Android地图尝试之两行代码调用高德地图
  5. dumpsys的使用笔记
  6. MAC中Android(安卓)Studio快捷键(一)
  7. Android前台服务 音乐播放器 前台服务
  8. (安卓/android)第一次开机扫描过程分析与
  9. Mac 下 下载Android源码步骤
  10. android分享功能的实现