Intent-- FLAG_ACTIVITY_CLEAR_TOP

原创 2016年05月31日 11:52:52

今天在项目中接触到了这么一个关键字,记录下来以备以后查看。

首先来看代码:

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
it.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

intent的源码,官方的解释如下:

/**
     * If set, and the activity being launched is already running in the
     * current task, then instead of launching a new instance of that activity,
     * all of the other activities on top of it will be closed and this Intent
     * will be delivered to the (now on top) old activity as a new Intent.
     *
     * <p>For example, consider a task consisting of the activities: A, B, C, D.
     * If D calls startActivity() with an Intent that resolves to the component
     * of activity B, then C and D will be finished and B receive the given
     * Intent, resulting in the stack now being: A, B.
     *
     * <p>The currently running instance of activity B in the above example will
     * either receive the new intent you are starting here in its
     * onNewIntent() method, or be itself finished and restarted with the
     * new intent.  If it has declared its launch mode to be "multiple" (the
     * default) and you have not set {@link #FLAG_ACTIVITY_SINGLE_TOP} in
     * the same intent, then it will be finished and re-created; for all other
     * launch modes or if {@link #FLAG_ACTIVITY_SINGLE_TOP} is set then this
     * Intent will be delivered to the current instance's onNewIntent().
     *
     * <p>This launch mode can also be used to good effect in conjunction with
     * {@link #FLAG_ACTIVITY_NEW_TASK}: 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.  This is
     * especially useful, for example, when launching an activity from the
     * notification manager.
     *
     * <p>See
     * <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back
     * Stack</a> for more information about tasks.
     */

解释很简单,如果intent设置了这个FLAG,假设需要新启动的Activity为B,并且任务栈中已经存在B的实例,那么会将任务栈中B之上的所有Activity(如果存在)结束。此时,任务栈栈顶的Activity为一个接收到了intent信息的B。

举例说明,假设任务栈中有四个Activity,分别为A-B-C-D(栈顶为D)。此时D调用startActivity() 方法去生成B,此时任务栈中的C和D将会被结束,栈顶为接收到了Intent的B。任务栈中剩余的Activity为A-B。

最后上例中B接收intent的方式取决于它的启动模式,当他的启动模式为标准模式时,B会结束自身在重新创建新的实例来接收intent。而其他启动模式,则不会创建新的实例,而是在onNewIntent()方法中接收intent信息。

Android 关闭多个视图Intent.FLAG_ACTIVITY_CLEAR_TOP用法

如果已经启动了四个Activity:A,B,C和D。在D Activity里,我们要跳到B Activity,同时希望C finish掉,可以在startActivity(intent)里的inten...
  • QQ55214
  • QQ55214
  • 2015年12月02日 20:40
  • 322

ActivityGroup相关--getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法

ActivityGroup相关--getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法 ...
  • nnmmbb
  • nnmmbb
  • 2014年08月20日 13:58
  • 581

android之结束所有的activity-Intent.FLAG_ACTIVITY_CLEAR_TOP详细-结束所有activity方法

1. Intent.FLAG_ACTIVITY_CLEAR_TOP 注意是 清除栈里自己以上的activity,所以叫TOP 2.结束所有activity,需要写一个类保存所有activit...
  • lqhed
  • lqhed
  • 2016年06月27日 20:26
  • 778

Intent的FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT

Activity的两种启动模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT   1. 如果已经启动了四个Activity:A,B,...
  • qjbagu
  • qjbagu
  • 2012年07月02日 19:14
  • 512

intent 启动模式(FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT)

Activity的两种启动模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT   1. 如果已经启动了四个Activity:...

Intent.FLAG_ACTIVITY_REORDER_TO_FRONT在华为C8817D上异常,使用Intent.FLAG_ACTIVITY_CLEAR_TOP直接回到桌面

最近项目中涉及从相册选择照片上传功能,参考QQ相册实现了功能,但是华为在C8817D手机上却出现了异常。具体请容我啰嗦一下: 主要有三个Activity:RootActivity(singleTop)...

singTask和FLAG_ACTIVITY_CLEAR_TOP的区别

假设所有的activity启动方式是standard,两者的区别就是1. intent中的flag为FLAG_ACTIVITY_CLEAR_TOP时,将指定activity上面的其他activity出...

FLAG_ACTIVITY_CLEAR_TOP

今天解决一个比较有意思的问题 问题描述,假设有一个application中包含两个activity A和B,此时先打开A 然后按Home键退回到MainHome,在framework中回退mai...

采用FLAG_ACTIVITY_CLEAR_TOP退出整个程序(多activity)

问题:  多activity中退出整个程序,例如从A->B->C->D,这时我需要从D直接退出程序。  网上资料:{  finish()和system(0)都只能退出单个activity。杀进程...

采用FLAG_ACTIVITY_CLEAR_TOP退出整个程序(多activity)

问题:  多activity中退出整个程序,例如从A->B->C->D,这时我需要从D直接退出程序。  网上资料:{  finish()和system(0)都只能退出单个activity。杀进程...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Intent-- FLAG_ACTIVITY_CLEAR_TOP
举报原因:
原因补充:

(最多只允许输入30个字)