Android Activity四种加载模式

1 Activity的四种加载模式

配置Activity时指定 android:launchMode 属性配置加载模式。

支持的属性值:

  • standard(标准模式,默认的加载模式): 不会启动创建新的任务栈,新的Activity会被添加到启动该Activity所在的原有的Task中

  • singleTask(Task内单例模式):

    • 创建的Activity所需要的Task不存在:创建该Activity所需要的Task,并将Activity添加到该Task中

    • 创建的Activity所需要的Task存在:

      • 将要启动的目标Activity不存在,系统会创建目标Activity实例,并将它加入Task栈顶

      • 将要启动的目标Activity位于Task栈顶,系统不会重新创建目标Activity实例,直接复用已有的Activity实例(会调用 onNewIntent() 获取当前请求信息)

      • 将要启动的目标Activity已经存在,但没有位于Task栈顶,系统会将所有位于该Activity上面的Activity移出Task栈,使目标Activity位于Task栈顶(会调用 onNewIntent() 方法获取当前请求信息)

  • singleTop(Task栈顶单例模式):

    • 将要启动的目标Activity已经位于Task栈顶时,系统不会重新创建目标Activity实例,而是直接复用已有的Activity实例(会调用 onNewIntent() 获取当前请求信息)

    • 将要启动的目标Activity没有位于Task栈顶,会重新创建目标Activity实例加载到Task栈顶

  • singleInstance(全局单例模式): 该模式具有 singleTask 的所有特性,无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例,并会使用一个全新的Task来加载该Activity实例。(简单说:Activity总是位于Task栈顶,且Activity所在的Task只包含该Activity)

    • 将要启动的目标Activity不存在,系统会先创建一个全新的Task,再创建目标Activity实例,并将它加入新的Task栈顶

    • 将要启动的目标Activity已经存在,无论它位于哪个应用程序中、位于哪个Task中,系统都会把该Activity所在的Task转到前台,从而使该Activity显示出来。(即该Activity使用了该模式,调用启动该Activity都会使用这个已经单独创建了Task的Activity,除非Task被销毁才会被重新创建)

2 Activity的Flags

  • FLAG_ACTIVITY_NEW_TASK:这个标记位的作用是为Activity指定singleTask启动模式

  • FLAG_ACTIVITY_SINGLE_TOP:这个标记位的作用是为Activity指定singleTop启动模式

  • FLAG_ACTIVITY_CLEAR_TOP:具有此标记位的Activity,当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈。这个模式一般需要和 FLAG_ACTIVITY_NEW_TASK 配合使用。在这种情况下,被启动Activity的实例如果已经存在,那么系统就会调用它的 onNewIntent()。如果被启动的Activity采用standard模式启动,那么它连同它之上的Activity都要出栈,系统会创建新的Activity实例并放入栈顶

  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:具有这个标记位的Activity不会出现在历史Activity列表中,当某些情况下我们不希望用户通过历史列表回到我们的Activity时这个标记位比较有用。它等同于在xml中指定Activity的属性 android:excludeFromRecents="true"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值