Android启动模式

来源:互联网 发布:mysql with cube 编辑:程序博客网 时间:2024/05/17 04:52

1、Android启动模式的作用

android启动模式是为了控制系统的任务栈,从而实现控制系统activity的返回行为,系统中定义的启动模式分为四类:standard,singleTop,singleTask,singleInstance。

在了解系统启动模式之前我们必须清楚任务栈的概念,任务是一系列行为的目的,栈就是这一系列行为的排列方式,所以任务是以栈的方式组织的一系列行为的集合,在android系统中行为即activity页面。

2、四种启动模式介绍:

2.1、standard启动模式
standard为系统的默认启动模式,系统每启动一个activity都会重新创建一个实例(不管这个实例是否已经存在),并将其加到任务栈中。

2.2、singleTop启动模式
栈顶复用,当要启动的activity位于当前任务栈的栈顶,那么此activity不会重新创建,而是复用这个栈顶activity,并调用它的onNewIntent()方法。当要启动的activity不是栈顶元素时,则按照系统的默认行为进行处理。

2.3、singleTask启动模式
栈内复用,这是一种单实例模式,当任务栈中存在这个activity的实例是,那么系统不会重新创建这个activity,而是调用onNewIntent()方法,同事singleTask启动模式默认具有clearTop的效果,所以当任务栈中存在这个activity,但不是栈顶元素时,那么位于它之上的所有activity都会出栈。

2.4、singleInstance启动模式
单实例模式,这是一种加强的singleTask,它除了具有singleTask的所有特性之外,还加强了一点,那就是这种模式的activity只能单独位于一个任务栈中,所以当后续再次启动这个activity是,会复用之前的任务栈而不会重新创建。

3、activity如何寻找所需要的任务栈

首先我们需了解一个参数:TaskAffinity,可以翻译为任务相关性,默认情况下这个值为应用的包名,这个值可以在AndroidManifest文件中修改,TaskAffinity主要和singleTask或者allowTaskReparenting配对使用,在其他情况下没有意义,待启动的activity会运行在名字和TaskAffinity相同的任务栈中。
默认情况下:待启动的activity是进入启动它的activity的任务栈中

4、activity的常用flag

FLAG_ACTIVITY_NEW_TASK:这个标记的效果和singleTask启动模式相同。
FLAG_ACTIVITY_SINGLE_TOP:这个标记的效果和singleTop启动模式相同.
FLAG_ACTIVITY_CLEAR_TOP:具有次标记的activity,当它启动的时候在同一个任务栈中所有位于它之上的activity都要出栈,这个标记一般会和singleTask一起使用,在这种情况下如果被启动的activity存在,那么系统会调用它的onNewIntent()方法。如果被启动的activity是标准启动模式,那么连同它和它之上的activity都要出栈,前面介绍过singleTask默认具有此标记。

0 0