intent.setFlags的参数含义及使用方法

来源:互联网 发布:ios软件免费下载 编辑:程序博客网 时间:2024/06/08 10:20

首先介绍一下intent.setFlags方法:设置特殊的flags来控制intent的处理事件。就理解成给intent附加一个标志吧。
intent.setFlags有一些重要的参数,这些参数的含义需要弄清楚。在理解这些参数的含义前,必须先了解Activity的生命周期,和多个Activity的栈管理方式。

多个Activity的栈管理方式

多个 Activity 之间采用的是栈道管理方式, 当用户启动新的 Activity 时, 新启动的 Activity 位于栈顶,当用户按后退按钮时, 栈顶的 Activity 被推出栈道并销毁, 如下图所示
这里写图片描述

setFlags的参数含义

  1. FLAG_ACTIVITY_NEW_TASK
    设置此状态,记住以下原则,首先会查找是否存在和被启动的Activity具有相同的亲和性的任务栈(即taskAffinity,注意同一个应用程序中的activity的亲和性一样,所以下面的a情况会在同一个栈中),如果有,刚直接把这个栈整体移动到前台,并保持栈中的状态不变,即栈中的activity顺序不变,如果没有,则新建一个栈来存放被启动的activity。

  2. FLAG_ACTIVITY_CLEAR_TOP
    Activity A启动开僻Task堆栈(堆栈状态: A), 在Activity A中启动Activity B(堆栈状态: AB), 在Activity B中启动Activity C(堆栈状态: ABC), 在Activity C中启动Activity D(堆栈状态: ABCD), 在Activity D中启动Activity B, 启动Activity B的Intent的Flag设置为FLAG_ACTIVITY_CLEAR_TOP, (堆栈状态: AB)。

  3. FLAG_ACTIVITY_SINGLE_TOP
    当前Task堆栈中存在ABCD四个Activity, A是栈顶Activity, D为栈底Activity, 存在打开A的Intent中设置FLAG_ACTIVITY_SINGLE_TOP标志, 则会使用栈顶A, 而不会从新New A.
    注意如果在应用外启动应用内的activity,则要设置newtask哦。

launchMode介绍

launchMode的作用与setFlags类似,但是其实在Manifest.xml里面配置的,所以,一旦配置了某launchMode,则这个Activity的所有实例都会有该属性。

  1. standard
    如果启动此Activity的Intent中没有设置FLAG_ACTIVITY_NEW_TASK标志, 则这个Activity与启动他的Activity在同一个Task中,”launchMode”设置为”standard”的 Activity可以被实例化多次, 可以在Task中的任何位置, 对于一个新的Intent请求就会实例化一次。
  2. singleTop
    如果启动此Activity的Intent中没有设置FLAG_ACTIVITY_NEW_TASK标志, 则这个Activity与启动他的Activity在同一个Task中,”launchMode”设置为”singleTop”的Activity可以被实例化多次, 可以在Task中的任何位置, 对于一个新的Intent请求如果在Task栈顶, 则会用栈顶的Activity响影Intent请求,而不会重新实例化对象接收请求, 如果没有在栈顶, 则会实例化一个新的对象接收Intent请求。
  3. singleTask
    “launchMode”设置为”singleTask”的Activity总是在栈底, 只能被实例化一次, 它允许其它Activity压入”singleTask”的Activity所在的Task栈,如果有新的Intent请求有此标志的Activity, 则系统会清除有此标志的Task栈中的全部Activity,并把此Activity显示出来。
  4. singleInstance
    launchMode”设置为”singleInstance”的Activity总是在栈底, 只能被实例化一次, 不允许其它的Activity压入”singleInstance”的Activity所在Task栈, 即整个Task栈中只能有这么一个Activity。
0 0
原创粉丝点击