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自己, 不能存在其他实例

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值