Android启动模式介绍

xiaoxiao2021-02-28  82

(不了解原理的可以查看系统源码中的ActivityStackSupervisor.java的startActivityUncheckedLocked方法,这个方法在启动activity时对四中启动模式进行了处理) 注意activity中task和backStack的概念,

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默认具有此标记。

       
转载请注明原文地址: https://www.6miu.com/read-37032.html

最新回复(0)