Android--Task与Back Stack

依稀记得刚开始学android的时候,有个功能,用户点击通知进入应用,启动一个指定的界面,之前纠结了好久,也没有整太明白如何将之前启动的一个界面从Back Stack中清除掉,那个时候英语还是比较单薄的,虽然现在依旧单薄,但是毕竟看过了那么多的文档,还是有一点点的进步了,所以今天有重新看了一下Android官方文档,较之以前又有了新的理解和感受,这里给大家进行一下共勉,也算是对之前苦逼的我一个安慰。下面言归正传。

首先介绍一下什么是Task和Back Stack

A task is a collection of activities that users interact with when performing a certain job. The activities are arranged in a stack (the "back stack"), in the order in which each activity is opened.

根据官网介绍,我们可以了解到,Task 可以说是一个任务、进程或者说就是我们应用的一个生存的空间,当我们点击屏幕的ICON启动一个应用的时候,这个时候就一个相应的Task产生了,Task是一个抽象的概念,所以我们不需要太深入的去纠结他,你可以把它当作就是我们应用的生存空间,好比我们应用启动,Android就给应用分配了3分地,这3分地就是我们应用的Task。那么什么是Back Stack呢?就是我们仅有的3分地的空间,你可以想象成我们在这3分地上建了3面墙,墙中间的空间只允许占一个人,然后发生了一个这样的事情。

1、路人A进去了,那么就在最里面,我们伸头一看,哦,路人A在里面。

2、路人B又进去了,我们又伸头一看,A不见了,只看到了B(此刻我们的目光就只能看到B,只有B能够获得我们的关注,就是所谓的fouce),A此刻呢由于空间小,就什么都做不了啊,所以就待着。

3、路人C又进去了,我们再伸头一看,B和A又看不到了。

4、怎么办呢?现在我们找B有事,那我们就说:“C你出来一下,我找B有事”。(由于空间小,所以C只能慢慢悠悠的从这个小管道里面出来,这个就是“后进先出”,last in first out)

5、C出来了,我们伸头一看,嘿、看到路人B了。

6、我们问他“你知道现在几点了吗?B说我忘记带手表了,A有。”

7、我们就又让B出来了,我们再看里面,A正在那看表呢,然后说:“已经6点了。”

然后大家异口同声的说:该下班了,回家吧。大家就各自收拾,A也从里面出来了,我们就都回家了。而这3分地里面就什么都没有了。

以上介绍本来想让大家更好的理解这个事情,不过貌似介绍的优点臃肿和冗余,由于刚开始写博客不久,还请大家谅解啊。


下面就开始正经的给大家介绍一下 manifest中的<activity>节点的属性lunchMode的几个种类分别有什么不同

1、standard:这个是系统默认的,就每当我们启动一个Activity的时候,就初始化一个实例,并且将之压入Stack的顶部。同一个Activity可以被初始化多个,这个同一个指的是同一个Activity类,多个指的是多个实例,我想大家都明白。

    2、singleTop: 就是说当我们要Start的这个Activity已经在Task的顶部了,那么Intent就会去调用它的onNewIntent() 函数去启动这个Activity。而不是重新初始化一个Activity实例并将它压入Stack顶部。如果这个Activity不再Stack的顶部,那么就去初始化一个并将它压入Stack顶部。同一个Activity可以有多个实例,但是只有在Stack的顶部不是此Acivity的时候才会有这个情况。

For example, suppose a task's back stack consists of root activity A with activities B, C, and D on top (the stack is A-B-C-D; D is on top). An intent arrives for an activity of type D. If D has the default "standard"launch mode, a new instance of the class is launched and the stack becomes A-B-C-D-D. However, if D's launch mode is "singleTop", the existing instance of D receives the intent through onNewIntent(), because it's at the top of the stack—the stack remains A-B-C-D. However, if an intent arrives for an activity of type B, then a new instance of B is added to the stack, even if its launch mode is "singleTop".这个是官方详细的解释。

   3、singleTask:这个类似于singleTop,只不过将这个Activity进行转移了,当我们启动此类型的Activity的时候,会同时产生一个新的Task,并且初始化这个Activity将之作为root Activity。如果这个Activity已经存在分离出去的Task中,那么就和singleTop类似,通过Intent的onNewIntent()函数去启动这个Activity,而不是创建一个实例,就是说在分离出来的Task中,只有一个这个Activity存在。不过当启动了这个Activity的之后,用户点击返回,依旧会返回到之前的Activity。

4、singleInstance:这个就有点不好捉摸了,这个不能按照之前给出的Back Stack的先进先出来考虑,因为这个和那个思想有点违背。这个就更好理解了,就是说,这个acivity永远只存在与一个Task,却这个Task里面只有一个Acivity.


以上就暂时介绍这么多,觉得介绍的不是太准确,还请大家指正和批评。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值