Activity的四种加载模式详解(standard singleTop singleTask singleInstance)

最简单的理解

activity的四种加载模式

android的多activity开发中,activity之间的跳转可能需要有多种方式,有时是普通的生成一个新实例,有时希望跳转到原来某个activity实例,而不是生成大量的重复的activity。加载模式便是决定以哪种方式启动一个跳转到原来某个Activity实例。

android里,有4activity的启动模式,分别为: standard, singleTop, singleTasksingleInstance, 其中standardsingleTop类似, singleTasksingleInstance类似, 用法如下:

(1).standardsingleTop

这两种加载模式下, 同一个task中可以存在一个activity的多个实例并且可以位于activity栈的任意位置。

先举个例子:

假设目标taskactivity栈为: A->B->C->D(栈底->栈顶)

在程序中调用startActivityD) 

如果Dstandard模式, 则activity栈变为:

A->B->C->D->D, 也就是会重新创建一个D实例

如果DsingleTop模式, 则activity栈变为

A->B->C->D, 不会创建D实例, 就是说如果D在目标task activity栈的栈顶, 则不会创建新的实例, 而是调用DonNewIntent()方法, 反之如果D不在目标task activity栈的栈顶, 则会重新创建一个D实例

(2). singleTasksingleInstance

这两种加载模式下, 同一个task中只会存在一个activity的实例, 如果通过startActivity()启动,则调用onNewIntent()方法, 而不是创建一个新的实例。这两种模式下, activity实例均位于activity栈的栈底。

这两种加载模式的区别:

假设一个Activity的实例采用如下两种加载模式:

singleTask:

   如果A调用startActivityB)启动B实例, 则AB位于同一个task中。

singleInstance:

   如果A调用startActivityB)启动B实例, 则系统会自动给intent添加一个属性FLAG_ACTIVITY_NEW_TASK, 将B实例放入到一个新的task中, 也就是说A实例所在的task中只能有A自己, 不能存在其他实例


猜你喜欢

转载自blog.csdn.net/Lin_XiJun/article/details/79278812