Android启动模式介绍

(不了解原理的可以查看系统源码中的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默认具有此标记。

       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值