Activity启动模式详解

学习Activity的启动模式之前,首先要明白Android中任务和返回栈的概念。Android官方API指南:任务是指在执行特定作业时与用户交互的一些列Activity。这些Activity按照各自的打开销魂许排列在堆栈(即返回栈)中。

任务可以理解为就是一系列Activity,返回栈就是存放Activity的栈堆。返回栈最重要的一点:即返回栈中的Activity永远不会重新排列。

启动模式(launchMode)

在清单文件声明Activity时,使用<activity>元素中的launchMode属性 指定Activity如何与任务关联。launchMode属性启动模式有四种。

“standard” 默认模式

系统在启动Activity的任务中创建Activity的新实例并向其传送intent。Activity可以多次实例化,而每个实例均可属于不通的任务,并且一个任务可以拥有多个实例。

standard 模式的Activity在API21以下有不同的表现。启动Activity的intent如果来自同一个应用,API21上下的表现是一样的。如果启动Activity的intent来自不同的应用,API21以下Activity将和发送intent的Activity处于同一个人任务当中。API21及以上会创建一个新任务,同时Activity将作为新任务的根Activity。

“singleTop” 

singleTop模式基本和standard模式一样,唯一的区别是,启动的Activity已经处于返回栈栈顶,此时不会创建新的Activity实例,而是直接调用该activity实例的onNewIntent()方法。

”singleTask“

系统创建新任务并实例化位于新任务底部的Activity。如果该Activity的一个实例已经存在于一个单独的任务中,则系统会通过调用现有实例的onNewIntent()向其传递intent,而不创建新实例。

singleTask模式关键就在于是否设置taskAffinity

<activity
    android:name=".launchMode.SingleTaskActivity"
    android:launchMode="singleTask"
    android:taskAffinity="">
</activity>

如果设置了taskActivity就会创建新任务,否则并不会创建新任务。不过不管是否创建新任务,如果Activity实例已经存在任务中都回调用onNewIntent()向其传递intent,同时弹出所有在次Activity实例之上的activity。

"singleInstance"

 

 

转载于:https://my.oschina.net/u/2438532/blog/847153

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值