Intent Flag - 标示某个Activity的启动模式方法之一

来源:互联网 发布:红警网络点不进去 编辑:程序博客网 时间:2024/05/01 21:49

若是英文过关,可以参照:https://developer.android.google.cn/reference/android/content/Intent.html 中Summary部分

(1)FLAG_ACTIVITY_NEW_TASK同一个应用的时候,不会有预想的效果(没有新建task);如果当前的task中有被启动的Activity,即使标记为FLAG_ACTIVITY_NEW_TASK,系统也会创建新的实例;在不同的应用中,a.使用FLAG_ACTIVITY_NEW_TASK:                举例情况说明:                B应用打开后,A应用启动B应用                流程:                此时存在B1,位于taskB;                A1存在,位于taskA;                A1启动B应用,会产生B2,位于taskB的栈顶部(返回建可以回到B1)总结:*启动Activity和被启动的Activity不处于同一个task*A1启动B时,会新建一个实例B2,而不是打开B1*B2是位于task的顶部的,若是taskB已经存在,那么位于task顶部b.不使用FLAG_ACTIVITY_NEW_TASK即不同应用中默认的时候,A1和B2是同一个task;(2)FLAG_ACTIVITY_SINGLE_TOP If set, the activity will not be launched if it is already running at the top of the history stack.这个大家应该比较熟悉,就不赘述了(3)FLAG_ACTIVITY_CLEAR_TOP同一个应用时候A1启动A2,A2启动A3,A3启动A4;此时:A4启动A2,但是新建的是A2*;并且此时back,会回到A1;总结:* A2,A3,A4都被清除掉了,栈顶是新的A2。* task相同上面三个是比较常用的Flag,下面简单介绍剩余的Flag;(4)FLAG_ACTIVITY_BROUGHT_TO_FRONT 这个标志一般不是由程序代码设置的,如在launchMode中设置singleTask模式时系统帮你设定(5)FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET 如果设置,这将在Task的Activity stack中设置一个还原点,当Task恢复时,需要清理Activity。也就是说,下一次Task带着FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记进入前台时(典型的操作是用户在主画面重启它),这个Activity和它之上的都将关闭,以至于用户不能再返回到它们,但是可以回到之前的Activity。 这在你的程序有分割点的时候很有用。例如,一个e-mail应用程序可能有一个操作是查看一个附件,需要启动图片浏览Activity来显示。这个Activity应该作为e-mail应用程序Task的一部分,因为这是用户在这个Task中触发的操作。然而,当用户离开这个Task,然后从主画面选择e-mail app,我们可能希望回到查看的会话中,但不是查看图片附件,因为这让人困惑。通过在启动图片浏览时设定这个标志,浏览及其它启动的Activity在下次用户返回到mail程序时都将全部清除。(6)FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 如果设置,新的Activity不会在最近启动的Activity的列表中保存(7)FLAG_ACTIVITY_FORWARD_RESULT 如果设置,并且这个Intent用于从一个存在的Activity启动一个新的Activity,那么,这个作为答复目标的Activity将会传到这个新的Activity中。这种方式下,新的Activity可以调用setResult(int),并且这个结果值将发送给那个作为答复目标的Activity(8)FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY 这个标志一般不由应用程序代码设置,如果这个Activity是从历史记录里启动的(常按HOME键),那么,系统会帮你设定(9)FLAG_ACTIVITY_MULTIPLE_TASK 不要使用这个标志,除非你自己实现了应用程序启动器。与FLAG_ACTIVITY_NEW_TASK结合起来使用,可以禁用把已存的Task送入前台的行为。当设置时,新的Task总是会启动来处理Intent,而不管这是是否已经有一个Task可以处理相同的事情。 由于默认的系统不包含图形Task管理功能,因此,你不应该使用这个标志,除非你提供给用户一种方式可以返回到已经启动的Task。 如果FLAG_ACTIVITY_NEW_TASK标志没有设置,这个标志被忽略(10)FLAG_ACTIVITY_NO_ANIMATION 如果在Intent中设置,并传递给Context.startActivity()的话,这个标志将阻止系统进入下一个Activity时应用Acitivity迁移动画。这并不意味着动画将永不运行——如果另一个Activity在启动显示之前,没有指定这个标志,那么,动画将被应用。这个标志可以很好的用于执行一连串的操作,而动画被看作是更高一级的事件的驱动。(11)FLAG_ACTIVITY_NO_HISTORY 如果设置,新的Activity将不再历史stack中保留。用户一离开它,这个Activity就关闭了。这也可以通过设置noHistory特性。(12)FLAG_ACTIVITY_NO_USER_ACTION 如果设置,作为新启动的Activity进入前台时,这个标志将在Activity暂停之前阻止从最前方的Activity回调的onUserLeaveHint()。 典型的,一个Activity可以依赖这个回调指明显式的用户动作引起的Activity移出后台。这个回调在Activity的生命周期中标记一个合适的点,并关闭一些Notification。 如果一个Activity通过非用户驱动的事件,如来电或闹钟,启动的,这个标志也应该传递给Context.startActivity,保证暂停的Activity不认为用户已经知晓其Notification。(13)FLAG_ACTIVITY_REORDER_TO_FRONT 如果在Intent中设置,并传递给Context.startActivity(),这个标志将引发已经运行的Activity移动到历史stack的顶端。 例如,假设一个Task由四个Activity组成:A,B,C,D。如果D调用startActivity()来启动Activity B,那么,B会移动到历史stack的顶端,现在的次序变成A,C,D,B。如果FLAG_ACTIVITY_CLEAR_TOP标志也设置的话,那么这个标志将被忽略
0 0
原创粉丝点击