Android四种启动模式

通常在默认的情况下,当我们多次启动Activity的时候,系统就会默认将它们依次放入任务栈,当我们按下返回键的时候,这些Activity就会一一回退,这就相当于出栈。那么系统给我们提供了四种启动模式:

  • standard 标准模式
  • singleTop 栈顶复用模式
  • singleTask 栈内复用模式
  • singleInstance 单实例模式

    现在我们依次讲解:

    standard

    这是系统默认的启动的模式,每启动一个Activity,系统都会创建一个新的实例,它的onCreat(),onStart(),onResume()都会被调用。即使任务栈已经存在。例如:在FirstActivity中启动自己,就还是会创建自已的一个新的实例。
    这里写图片描述

那么我们给出实例看看:
这里写图片描述

我们连续点击“启动本身”三次,看看Log
这里写图片描述

singleTop

这个模式下,就是,如果新启动的Activity已经处于栈顶,那么这个Activity就不会被重新创建,但是它的onNewIntent()会被回调,但是onCreat()、onStart()是不会回调的。如果新启动的Activity不是在栈顶,那么新的Activity依然会创建实例。
这里写图片描述

这里写图片描述

现在看看Log的信息,FirstActivity–>SecondActivity(singleTop模式)–>SecondActivity
这里写图片描述

如果是FirstActivity–>SecondActivity–>FirstActivity–>SecondActivity
这里写图片描述
看看第二次启动SecondActivity的时候,虽然SecondActivity的实例还是在栈内,但是不是在栈顶,所以依然会创建新的实例。

singleTask

这是一种单实例模式,只要启动的Activity的实例存在栈内,就不会重新创建实例,但是onNewIntent()会回调。假如现在栈内的情况是:ABC,A是栈底,C是栈顶,现在在本栈内创建D(singleTask),就会将D进栈,变成ABCD。
如果该实例不是在栈顶的话,如ADBC。那么在它前面的所有实例会Destory,而它就会处于栈顶,最终会变成AD。

当要启动的SecondActivity已经在栈顶,就相当于是singleTop。
这里写图片描述

若要启动的SecondActivity不是在栈顶,但是实例已经存在,那么它会调用onNewIntent,并且置于栈顶,在它之前的实例全部出栈。
这里写图片描述

singleInstance

这是一种加强的singleTask,它不仅具有singleTask的特性,还有就是此种模式的Activity只能单独存在于一个任务栈中。
这里写图片描述
新启动的任务的ID都不同了,所以就是说创建了一个新任务栈。之前的几种启动模式,它们的TaskId是一样。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值