android打印intent flag,Android Intent 常用的Flag

Android Intent 常用的Flag

Activity的启动模式可以在AndroidManifest.xml中定义launchMode,也可以通过intent.setFlag(int flags)或者intent.addFlag(int flags)进行设置,这里主要讲常用的几种Flag方便日后使用(不对的地方还望指正).

Android Intent 常用的Flag有以下几种:

FLAG_ACTIVITY_NEW_TASK

FLAG_ACTIVITY_CLEAR_TOP

FLAG_ACTIVITY_SINGLE_TOP

FLAG_ACTIVITY_CLEAR_TASK

FLAG_ACTIVITY_NEW_TASK

If set, this activity will become the start of a new task on this history stack. A task (from the activity that started it to the next task activity) defines an atomic group of activities that the user can move to. Tasks can be moved to the foreground and background;all of the activities inside of a particular task always remain in the same order.

When using this flag, if a task is already running for the activity you are now starting, then a new activity will not be started; instead, the current task will simply be brought to the front of the screen with the state it was last in.

public static final int FLAG_ACTIVITY_NEW_TASK = 0x10000000;

FLAG_ACTIVITY_NEW_TASK如果设置了这个flag,这个activity将会成为历史栈里面的新任务,什么是任务呢?任务是指在执行特定作业时与用户交互的一系列 Activity。 这些 Activity 按照各自的打开顺序排列在堆栈(即返回栈)中。

当使用这个flag的时候,如果你正在start的那个activity已经在运行了,那么就不会启动一个新的activity,相反,当前的任务就会以它原来的状态呈现在前台.

developer: FLAG_ACTIVITY_NEW_TASK

在新任务中启动 Activity。如果已为正在启动的 Activity 运行任务,则该任务会转到前台并恢复其最后状态,同时 Activity 会在 onNewIntent() 中收到新 Intent。

正如前文所述,这会产生与 "singleTask"launchMode 值相同的行为。

FLAG_ACTIVITY_CLEAR_TOP

(注释的api很长,这里就复制粘贴了)

如果正在启动的 Activity 已在当前任务中运行,则会销毁当前任务顶部的所有 Activity,并通过 onNewIntent() 将此 Intent 传递给 Activity 已恢复的实例(现在位于顶部),而不是启动该 Activity 的新实例。

产生这种行为的 对应launchMode的值 。

FLAG_ACTIVITY_CLEAR_TOP 通常与 FLAG_ACTIVITY_NEW_TASK 结合使用。一起使用时,通过这些标志,可以找到其他任务中的现有 Activity,并将其放入可从中响应 Intent 的位置。例如在notification manager 中启动activity.

FLAG_ACTIVITY_CLEAR_TOP 通常与 FLAG_ACTIVITY_NEW_TASK 结合使用,在API中的文档这样说的:if used to start the root activity of a task, it will bring any currently running instance of that task to the foreground, and then clear it to its root state.

FLAG_ACTIVITY_SINGLE_TOP

If set, the activity will not be launched if it is already running at the top of the history stack.

如果正在启动的 Activity 是当前 Activity(位于返回栈的顶部),则 现有实例会接收对 onNewIntent() 的调用,而不是创建 Activity 的新实例。

这会产生与 "singleTop"launchMode 值相同的行为。

FLAG_ACTIVITY_CLEAR_TASK

this flag will cause any existing task that would be associated with the activity to be cleared before the activity is started. That is, the activity becomes the new root of an otherwise empty task, and any old activities are finished.This can only be used in conjunction with {@link #FLAG_ACTIVITY_NEW_TASK}.

这个flag会在启动这个activity之前,清理掉与这个activity相关的任何任务.也就是说,这个activity会在其他空任务中的成为新根activity,且任何旧的activity会被销毁. 注意,这个flag只能和FLAG_ACTIVITY_NEW_TASK结合使用.

FLAG_ACTIVITY_NEW_TASK+FLAG_ACTIVITY_CLEAR_TASK结合使用的场景场景:调起第三方的app,使得第三方的app从launcher页面重新打开(就像杀掉app,重新进来app一样).(我的项目中有用到)

如果想以singleTask的模式启动一个launchMode为standard的activity,可以这么写:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

有人说使用intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP),但是是不对的,因为这两者联合使用的时候,如果指定 Activity 的启动模式为 “standard”,则该 Activity 也会从堆栈中移除,并在其位置启动一个新实例,以便处理传入的 Intent。 这是因为当启动模式为 “standard” 时,将始终为新 Intent 创建新实例。–来自安卓中文开发文档https://developer.android.com/guide/components/tasks-and-back-stack?hl=zh-CN

也有人说普通的Activity以singleTask模式启动需要使用(FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACITIVTY_CLEAR_TOP),经过测试部分手机,如果app从未开启过或者被杀死startActivity()之后无法调起activity.

参考:

https://developer.android.com/guide/components/tasks-and-back-stack?hl=zh-CN

https://blog.csdn.net/wzy_1988/article/details/78240734

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Androidintent multi_task flag的具体含义是指当打开一个新的Activity时,如果设置了multi_task flag,则会在后台创建新的task,而不是在当前task中打开新的Activity。 ### 回答2: Android中,Intent的multi_task标志是指一个意图可以同时启动多个任务。当我们在启动一个Activity时,可以设置Intent的flags属性为FLAG_ACTIVITY_MULTIPLE_TASK。这个标志告诉系统,当前的Activity可以在其自己的任务栈中启动。 具体来说,当我们使用multi_task标志时,通过startActivity()方法启动Activity时,系统会根据设置的flag来决定Activity的启动行为。如果该Activity已经存在于一个任务栈中,那么系统会创建一个新的任务栈,并在新的任务栈中启动这个Activity。这样可以同时打开多个相同的Activity,并且它们各自运行在不同的任务栈中。 使用multi_task标志可以实现一些特定的功能需求,比如多窗口分屏、在同一个应用中同时打开多个相同的Activity等。通过在Intent中设置这个标志,我们可以灵活地控制Activity的启动模式,增加用户的使用体验。 需要注意的是,使用multi_task标志时,要特别小心各个Activity之间的共享数据和资源的问题,需要进行适当的处理,以免出现意外情况。同时,使用该标志时,也要考虑到设备的性能和用户的使用习惯,避免过多占用系统资源。 总之,Intent的multi_task标志是指可以同时启动多个任务的意图。在Android开发中,我们可以通过设置这个标志来控制Activity的启动行为,从而满足不同功能需求。 ### 回答3: 在Android中,Intent是一种在组件之间传递信息的机制。Intent有很多的标志位(flag)可用于指定Intent的行为。其中,multi_task flag是一个用于指定启动Activity时的行为的标志位。 multi_task flag代表启动一个新的任务(Task)。在Android中,一个任务是一系列相关联的活动(Activity)的集合。当我们使用Intent启动一个Activity时,系统会创建一个新的任务,并将该Activity添加到该任务中。 具体来说,使用multi_task flag启动一个Activity时,系统会为该Activity创建一个独立的任务,并将该Activity置于任务栈的顶部。该Activity会显示在最近使用过的应用列表中,并且可以通过系统的任务切换(Task Switcher)功能进行切换。 multi_task flag的具体含义是允许Activity在独立的任务中运行。对于需要在不同任务之间切换的场景,例如在多窗口模式下同时运行多个应用程序,或者在某些设备的分屏模式下使用多个应用程序时,使用multi_task flag可以很方便地创建并切换任务。 需要注意的是,使用multi_task flag启动Activity时,可能会受到一些限制。例如,一些权限和启动模式可能会影响Activity是否能够在新的任务中启动。因此,在使用multi_task flag启动Activity时,需要仔细考虑相关的权限和启动模式设置。 总之,Android中multi_task flag具体含义是允许Activity在独立的任务中运行,以实现在不同任务之间切换的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值