Android四种启动模式

当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。

你可能感兴趣的:(android)