android Activity launchMode

1. Task 和 BackStack

    在学习launchMode之前,我们先要理解Task和BackStack,Task是用户所交互的activity的序列,通常情况下,一个Task是从用户点击app图标首次运行一个app开始的,在不返回Home界面的情况下,后续所跳转的所有Activity都属于该Task。

    一个Task中的所有Activity都是放在一个栈中去管理的,这个栈就是BackStack,每一个Task都有一个BackStack。在简单的场景下,用户每打开一个新的Activity,这个Activity就会被Push到BackStack顶部,用户按Back键退出一个Acticity时,这个Activity会被Pop出BackStack并Destroy。

    Task的状态也分为前台和后台(Background),当我们按Home键时,整个Task都会被切换到后台,当Task处于后台时,Task中所有Activity都处于stopped状态。

    盗一张developers的图:

    



2.launchMode

    launchMode用来定义Activity加载进Task的方式,它有以下四种:
    
    (1)standard
    如果不声明的话默认使用的就是这种方式,当你使用Intent启动一个Activity时,系统每次都会创建一个新的实例,并将该实例放入当前的BackStack中。在这种模式下,一个Activity可以被实例化多次,一个Task中可以有该Activity的多个实例,多个实例也可能在不同的Task中。
    
    (2)singleTop
    在这种模式下,如果某个Activity的实例处于BackStack顶部,那么当有Intent启动该Activity时,系统将会使用顶部的该Activity实例而不会创建新的实例。如果某个Activity的实例并不处于栈顶的话,系统将会创建新的实例,和standard一样。

    (3)singleTask
    在该模式下,一个Activity只存在于一个Task中,当有Intent启动该Activity时,如果该Activity从未创建,系统将会为该Activity创建一个新的Task,并将该Task的BackStack Push到调用该Activity的Task的栈顶,看google的一张图可以清晰的理解该方式:
    
    从上图可以看出,一个Task是可以有多个Activity的。
   
    (4)singleInstance
    该模式与singleTask的唯一区别就是,一个Task中只存在一个Avtivity,换句话说,只要一个Activity不存在,系统创建它时都会为它创建一个Task。
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值