Activity的启动模式

来源:互联网 发布:下周重要经济数据 编辑:程序博客网 时间:2024/05/21 10:34

首先说一下任务栈,任务栈是一种“后进先出”的栈结构,每单机back键,栈中的activity都会按次序出栈,直到栈空为止,这时候系统就会回收这个任务栈。

下面说一下Activity的启动模式:

1.standard

标准模式,这也是系统的默认模式。每次启动一个Activity,都会创建一个新的实例,不管这个实例是否已经存在。比如ActivityA启动他自己本身,这时在栈中已经有了ActivityA的实例,但是在启动之后,会有一个新的实例被创建,而且被压入栈中,并且在栈顶。

在这种标准模式下,谁启动了Activity,这个Activity就会被压入谁的栈中。所以,当我们用ApplicationContext启动标准模式(standard模式)下的Activity时,程序会报错,因为非Activity类型的Context没有任务栈。所以程序报错。那么如何解决这个问题呢,在要启动的Activity中制定FLAG_ACTIVITY_NEW_TASK标记位即可。


2.singelTop

栈顶复用模式

在这种模式下,如果新Activity已经位于栈的栈顶,那么不会创建新的Activity对象。

比如栈内的顺序为ABCD,这个时候启动D,栈内还是为ABCD,如果为standard,模式,栈内会变成ABCDD。


3.singleTask

栈内复用模式

这是一种单实例模式,这种模式下,只要activity在栈中存在,多次创建activity都不会重新创建实例。

比如ActivityA,被创建的时候系统会找A想要的栈是否存在, 如果不存在那么新建一个栈,如果存在,那么看A是否在栈中有实例存在,有的话把A的实例调到栈顶,比如栈中的顺序为DACB,在singleTask模式下启动A,栈内顺序会变成DA,因为singleTask默认具有clearTop的效果,会导致A上面的Activity都出栈。如果实例不存在,就创建实例压入栈中,比如原来为DCB,现在变成DCBA。


4.singleinstance

单实例模式,这是加强版的singleTask,它具有singleTask的所有特性,除此之外,具有此模式的Activity只能单独的运行在一个栈中。

1 0
原创粉丝点击