Android之activity加载模式

        Android的activity在AndroidManifest中有一个属性android:launchMode,里面有4个加载模式,分别是:standard,singleTop,singleTask,singleInstance。

    1.standard模式

    standard即标准,如果在AndroidManifest中没有设置则默认为standard,同一个activity在intent中会不停的实例化,比如A是activity,A中启动A就是A-A-A-A-A,或者是A-B-B-A-B,同一个activity可以实例化很多次。

    2.singleTop模式

   从字面上理解顶部单个的,也就是activity处于栈顶时,再次创建同一个activity时不会再实例化,如果不在栈顶,效果和standard一样,比如A在栈顶,重复创建的结果还是A,但是如果是A-B-C这样的结构,如果A是栈顶,实例化C的话,就变成了C-A-B-C。

   3.singleTask模式

    想要理解这个模式首先要理解task,那么Android中的task是干什么的呢?

   一般我们启动一个应用的时候系统会创建一个task,而我们在activity跳转时会将activity压栈,这是这一个stack是属于这个task的,但是我们也能通过singleTask,singleInstance去创建task,比如前者我们通过singleTask启动的activity会被当成root activity,从这个activity启动的activity也会压栈到这个task中,不同的task通过TaskID进行区分。那么此时如果我通过一个task中的activity启动另一个task的activity,那么堆栈中所有的activity都会被移动到前台来,画个图比喻一下。

   

   4.singleInstance模式

  这个模式和singleTask除了一个区别外,其他都是一样的。这个新建的task只能容纳这一个activity,至于启动其他的activity则不在这个堆栈里面。其他的不赘述了。

除了在AndroidManifest中设置外,我们在intent的setFlags中也能传递相应的标识,来修改activity和task的关系。下面介绍几个比较特殊的,一般的就不说了。

 FLAG_ACTIVITY_CLEAR_TOP

如果一个activity在启动另一个存在于同一个task中的activity的时候添加了这个标识,那么target activity前面的activity都会被销毁,比如A - B - C -D,现在A启动了C,并添加了这个标识,那么C前面的activity(即A,B)都将销毁,结果就是task中只有C - D。

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

这个标识是启动的activity不会在最近的activity列表中保存

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值