关于Activity启动模式的初步理解

首先简单介绍一下任务栈的概念

  • android任务栈(Task)是一个 “ 先进先出 ” 的栈结构,用来存放Activity的实例;
  • 一个任务栈中可以有多个Activity实例,每个实例也可以属于不同的任务栈;

    这里我们只需要简单了解一下,方便后面理解就行了。

四种启动模式:

standard(标准模式):系统的默认启动模式;

  1. 在这种模式下,Activity A 以标准模式启动了Activity B,B就会进入A所在的栈;

  2. 如果用ApplicationContext去启动standard模式的Activity,就会报错,原因是非Activity类型的Context(如:ApplicationContext)并没有所谓的任务栈,因此当前启动的活动不知道该进入哪个栈,所以会出错;

  3. 如果以 ApplicationContext 去启动一个Activity,需要为它指定FLAG_ACTIVITY_NEW_TASK 标记位,这样启动的时候会为它创建一个新的任务栈(实际上是以singleTask模式启动);

singleTop(栈顶复用模式)

  1. 在这种模式下,如果新的Activity已经位于任务栈的栈顶,那个此Activity不会被重新创建,同时它的onNewIntent方法会被回调,而onCreate和onStart方法不会被调用;

  2. 如果新的Activity的实例已经存在,但是不在栈顶,那么新的Activity仍然会重新创建。

singleTask(栈内复用模式)

  1. 这是一种单实例模式,在这种模式下,只要Activity在一个栈中存在,那么多次启动这个Activity都不会重新创建实例,而是将这个Activity上面的Activity都出栈,直到这个Activity位于栈顶。并且,系统也会回调它的onNewIntent方法;

  2. 举例说明:

    当前任务栈S1中的情况是ABC
    

    2.1. 列表内容如果D以singleTask模式请求启动,其所需要的任务栈为S2,这时会创建任务栈S2,并创建实例D将其入栈到S2(D);

    2.2. 如果D以singleTask模式请求启动,其所需要的任务栈为S1,这时会创建实例D并将其入栈到S1(ABCD);

    2.3. 如果D所需的任务栈为S1,并且当前任务栈S1的情况为ADBC,由于singleTask默认具有clearTop的效果,所以会将D上面的Activity全部出栈,最终S1(AD);

singleInstance(单实例模式)

  1. 除了具有singleTask模式的所有特性,还要求具有这种启动模式的Activity只能单独位于一个任务栈;

昨天参加面试,面试官问到关于activity启动模式的问题,只记得当初只是粗略看了一下,并没有深究,自然是凉凉,所以回来恶补一顿,此处只作为学习笔记,不喜勿喷。当然也希望有理解深入的大神可以在评论区分享自己的理解。

这里分享一本书《Android开发艺术探索》任玉刚老师的 很赞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值