java activity模式_Android (activity启动模式)

概述

Activity有四种启动模式(launchMode): 1、standard 模式 这是系统默认的启动模式,如果一个 Activity 的启动模式是 standard,则该 Activity 可以被多次实例化,且可以在不同的任务栈中存在。非 Activity 类型的 context (如 ApplicationContext )启动 standard 模式的 Activity 时会报错,因为非 Activity 类型的 context 并没有所谓的任务栈,所以系统会报错。此解决办法就是为待启动 Activity 指定 FLAG_ACTIVITY_NEW_TASK 标记位,这样启动的时候系统就会为它创建一个新的任务栈。这个时候待启动 Activity 其实是以 singleTask 模式启动的。 2、singleTop模式 如果一个 Activity a 的启动模式是 singleTop,则 Activity a 启动时会判断当前任务栈栈顶是否是该 Activity 的实例,如果是则不创建新的 a 实例而是直接引用这个栈顶 a 实例,同时 a 的 onNewIntent 方法会被回调,通过该方法的参数可以取得当前 Intent 的信息;如果当前栈顶不是 Activity a,则创建新的 Activity a 实例压入栈 3、singleTask模式 如果一个 Activity b 的启动模式是 singleTask,在第一次启动这个 Activity b 时,系统便会创建一个新的任务栈,并且初始化 Activity b 的实例,放在新任务栈的底部。但是,如果这个 Activity b 已经存在于另一个任务栈中,则系统会销毁该栈在 Activity b 以上的所有Activity,然后调用该 Activity的 onNewIntent() 方法,不会创建新的实例。也就是说同一时刻只能存在一个该 Activity的实例。 无论 Activity 是在新任务栈中启动还是在相同的任务栈中启动,“返回”按钮始终会将用户带到上一个 Activity。但是,如果启动指定了 singleTask启动模式的 Activity,同时如果 后台 任务栈中存在该 Activity 的实例,则将整个任务栈内的 Activity 带到前台。此时,当前任务栈 现在包括在堆栈顶部提出的任务中的所有活动。 4、singleInstance模式 这个是 singleTask 模式的加强版,它除了具有 singleTask 模式的所有特性外,它还有一点独特的特性,那就是此模式的 Activity 只能单独地位于一个任务栈,不与其他 Activity 共存于同一个任务栈。从这个 Activity 启动的任何其他Activity都会放到其他的任务栈。

d1637aca4b7c6747bcb053afc1cde974.png

intent (Flags)

通过上面我们了解了Activity的几种启动模式,接下来我们看看 SingleTask和 Intent.FLAG_ACTIVITY_CLEAR_TOP的区别: singleTask:栈内复用模式。是一种单实例模式,在这种模式下,如果该Activity在栈中存在,那么多次启动此Activity都不会重新创建实例,而是销毁在它之上的所有Activity(不包括它本身),复用该Activity并调用它的onNewIntent方法,如果该Activity不存在,则创建该Activity并将其入栈到该Activity所需的任务栈中。 Intent.FLAG_ACTIVITY_CLEAR_TOP:销毁目标Activity和它之上的所有Activity,重新创建目标Activity,不会调用onNewIntent方法。 Intent.FLAG_ACTIVITY_SINGLE_TOP :当该activity处于栈顶时,可以复用,直接onNewIntent。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值