Android任务栈

最近在读一些Android方面的工具书温习一些一些基础知识,发现有些知识讲解的很好,在这里就把书中的和自己从网上查到的一些知识点总结一下,以备自己查阅。


谈到Android任务栈,就必须提到AndroidManifest里的几种启动方式。


standard方式就不用赘述了,是我们Activity默认的启动方式。在这里我需要列一下自己在学习中的感想:当我们在standard模式下的时候,当我们使用applicationcontext去启动standard 模式的Activity时,会报错误,错误如下:

android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?  
为什么会报这样的错误呢?因为standard模式的Activity默认会进入当前Activity的任务栈中,因为ApplicationContext并没有任务栈,所以会报如上的错误。解决的方法就是提供FLAG_ACTIVITY_NEW_TASK flag标记位,这个时候启动就会创建一个新的任务栈,这个时候启动的Activity是以singleTask模式启动的。


如果我们的启动Activity的方式是singleTop的话,那么在启动的时候,系统会判断当前栈顶的Activity是不是要启动的Activity,如果是则不用再创建新的Activity而是直接引用这个Activity;如果不是则创建新的Activity。


singleTask模式则是检验整个Activity栈中是否存在当前需要启动的Activity,如果存在,则将这个Activity置于栈顶,并将该Activity上的Activity全部销毁。


singleInstance模式则是指会创建一个新的任务栈,它会拥有一个新的taskid。它创建的Activity会直接加载在前一个task队列中,而不是在新的taskid中。这个慕课网教程说的非常好,推荐给大家:http://www.imooc.com/video/7590,尤其是老师画图讲解的部分,我觉得是说的最清楚的。


同样地,我们的intent flag也有很多值,较为常用的是:


FLAG_ACTIVITY_SINGLE_TOP,它的效果和之前的manifest中的“singleTop”相同。


FLAG_ACTIVITY_CLEAR_TOP,他的方式是与singleTask相同,我却曾经错误地把它当做一个清空任务栈的操作来做的,在这里要牢记singleTask的使用方式。


FLAG_ACTIVITY_NO_HISTORY,它的方式是在跳转到另一个Activity之后,原来的Activity被自动移除了,也就是和我们跳转之后再finish掉前一个Activity是一个效果。


FLAG_ACTIVITY_CLEAR_TASK,如果Intent中设置了这个标志,会导致含有待启动Activity的Task在Activity被启动前清空。也就是说,这个Activity会成为一个新的root,并且所有旧的activity都被finish掉。这个标志只能与FLAG_ACTIVITY_NEW_TASK 一起使用。


这里可能有一些知识对于大家来说谁老调重弹,但是在这里我尽量使用我自己 所能理解的最简单的语句来记录这些Android的知识点,以备自己查阅。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值