FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT用法
1. 如果已经启动了四个Activity:A,B,C和D。在D Activity里,我们要跳到B Activity,同时希望C,D finish掉,可以在startActivity(intent)里的intent里添加flags标记,如下所示:
- Intent intent = new Intent(this, B.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(intent);
这样启动B Activity,就会把D,C都finished掉,如果你的B Activity的启动模式是默认的(multiple) ,则B Activity会finished掉,再启动一个新的Activity B。
如果不想重新再创建一个新的B Activity,则在上面的代码里再加上:
- intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
这样B Activity就会再创建一个新的了,而是会重用之前的B Activity,同时调用B Activity的onNewIntent()方法。
2. 如果已经启动了四个Activity:A,B,C和D,在D Activity里,想再启动一个Actvity B,但不变成A,B,C,D,B,而是希望是A,C,D,B,则可以像下面写代码:
- Intent intent = new Intent(this, MainActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
- startActivity(intent);
此外Intent还包含其他几个Flag标示。
Intent.FLAG_ACTIVITY_NEW_TASK
默认的跳转类型,会重新创建一个新的Activity,不过与这种情况,比方说栈中有A,B,C三个Activity,此时在C中启动D的话,如果在Manifest.xml文件中给D添加了Affinity的值和Task中的不一样的话,则会在新标记的Affinity所存在的Task中压入这个Activity。如果是默认的或者指定的Affinity和Task一样的话,就和标准模式一样了启动一个新的Activity.
FLAG_ACTIVITY_NO_HISTORY
意思就是说用这个FLAG启动的Activity,一旦推出,他就不会存在于栈中,原来是A,B,C 这个时候再C中以这个FLAG启动D的 , D再启动E,这个时候栈中情况为A,B,C,E。
FLAG_ACTIVITY_BROUGHT_TO_FRONT
这个意思是重新创建一个新的Activity(即便堆栈中已经存在这个Activity),并提到栈顶。
比如,A,B,C,D都是标准加载,然后我在D中启动A,这个intent加上FLAG_ACTIVITY_BROUGHT_TO_FRONT ,不要会误认为变成B,C,D,A!!其实不是,这个时候应该是A,B,C,D,A.不信的人大家试试看。不过下面这个标记和这个标记就会让大家明白了!
FLAG_ACTIVITY_REORDER_TO_FRONT区别
这个的意思是如果栈里已经存在,则将它拿到栈顶,不会启动新Activity。比如栈中有A,B,C三个Activity。此时在C中启动A的话,这时候栈的顺序为B,C,A。
参考:
Intent对象在Android开发中起着举足轻重的作用,其内置了丰富的常量,用于传递数据,下面本文将介绍跟Task有关的一些Flag参数,各参数的理解均来自Android API和本人在实际项目中的体验,如果有描述不当之处,还请各位不吝赐教。
FLAG_ACTIVITY_BROUGHT_TO_FRONT: 这个标志一般不是由程序代码设置的,如在launchMode中设置singleTask模式时系统帮你设定。
FLAG_ACTIVITY_CLEAR_TOP: 如果目标Activity已经运行于当前的Task中,则关闭Activity Stack中在此Activity上方的所有Activity,然后将此Intent传递到该Activity实例内。例如,假设一个Task的Activity Stack中包含这些Activity:A,B,C,D。如果D调用了startActivity(),并且Intent指向B,那么,C和D都将结束,然后B接收到这个Intent,因此,目前stack的状况是:A,B。
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET: 如果设置,这将在Task的Activity Stack中设置一个还原点,当Task恢复时,需要清理Activity。例如下一次Task带着FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记进入前台时,这个Activity和它之上的都将关闭,以至于用户不能再返回到它们,但是可以回到之前的Activity。
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS: 如果设置,新的Activity不会在最近启动的Activity的列表中保存。
FLAG_ACTIVITY_FORWARD_RESULT: 如果设置,并且这个Intent用于从一个存在的Activity启动一个新的Activity,那么,这个作为答复目标的Activity将会传到这个新的Activity中。这种方式下,新的Activity可以调用setResult(int),并且这个结果值将发送给那个作为答复目标的Activity。
FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY: 这个标志一般不由应用程序代码设置,如果这个Activity是从历史记录里启动的(常按HOME键),那么,系统会帮你设定。
FLAG_ACTIVITY_MULTIPLE_TASK: 不建议使用此标志,除非你自己实现了应用程序启动器。
FLAG_ACTIVITY_NEW_TASK: 将使Activity成为一个新Task的开始。
FLAG_ACTIVITY_NO_ANIMATION: 这个标志将阻止系统进入下一个Activity时应用Acitivity迁移动画。
FLAG_ACTIVITY_NO_HISTORY: 新的Activity将不再历史stack中保留。一旦离开,此Activity就关闭了。
FLAG_ACTIVITY_NO_USER_ACTION: 这个标志将在Activity暂停之前阻止从最前方的Activity回调的onUserLeaveHint()。
FLAG_ACTIVITY_PREVIOUS_IS_TOP: If set and this intent is being used to launch a new activity from an existing one, the current activity will not be counted as the top activity for deciding whether the new intent should be delivered to the top instead of starting a new one. The previous activity will be used as the top, with the assumption being that the current activity will finish itself immediately.
FLAG_ACTIVITY_REORDER_TO_FRONT: 这个标志将引发已经运行的Activity移动到历史stack的顶端。
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED: If set, and this activity is either being started in a new task or bringing to the top an existing task, then it will be launched as the front door of the task. This will result in the application of any affinities needed to have that task in the proper state (either moving activities to or from it), or simply resetting that task to its initial state if needed.
FLAG_ACTIVITY_SINGLE_TOP: 如果Activity位于Activity Stack的顶端,则不再创建一个新的实例。
上面纷杂的Intent内置参数在简单的Android应用时,可以启到比较好的控制作用,但是一旦Android应用过于复杂,那么自定一个Activity List以管理Activity不失于一种更好更高效的管理方法。
FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT用法的更多相关文章
- Intent的FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT
Activity的两种启动模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT 1. 如果已经启动了四个Activity:A,B,C和D. ...
- android 启动模式介绍
Android启动模式 (1)Task:与Android系统是个多任务的系统中的任务是不同的.后者更倾向于多进程和多线程来说的,而这里的任务与application(应用程序)和activity(活动 ...
- ActivityGroup、TabHost之子页面不刷新——getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法
TabHost继承自ActivityGroup,以下不再单独列出. ActivityGroup在第一次创建的时候会完整的执行子Activity或子view的生命周期,但在从其他子activity或子v ...
- ActivityGroup相关--getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法
ActivityGroup简介 1.ActivityGroup的核心就是继承了该类,能够通过getLocalActivityManager()得到一个LocalActivityManager 如,Lo ...
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法
如果已经启动了四个Activity:A,B,C和D.在D Activity里,我们要跳到B Activity,同时希望C finish掉,可以在startActivity(intent)里的inten ...
- 【转】Android 关闭多个视图Intent.FLAG_ACTIVITY_CLEAR_TOP用法
如果已经启动了四个Activity:A,B,C和D.在D Activity里,我们要跳到B Activity,同时希望C finish掉, 可以在startActivity(intent)里的inte ...
- ( 转转)Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)
大家好,今天跟大家谈谈Intent的用法. Intent在安卓中主要用于打开另外一个页面,这个页面可能是一个activity也可能是一个应用,也可能是 其它…… 且看下面介绍,总结摘抄网友一些 ...
- 你不可不知的 React Native 混合用法(Android 篇)
前言 当前 React Native 虽说版本更新比较快,各种组件也提供的很全面了,但是在某些情况下,混合开发的方式才会快速缩短开发周期,原因无非就是原生平台的"底蕴"无疑更深,拥 ...
- Android Intent用法总结
Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 ...
随机推荐
- rtc关机闹钟3 IAlarmManager
vim framework/base/core/java/android/app/IAlarmManager.aidl import android.app.AlarmManager;import a ...
- ThinkPhp之分页
function page($count,$pagesize=3){ $Page=new \Think\Page($count,$pagesize); //每页显示记录数 $Page->setC ...
- 磕磕碰碰的Chrome之plugin开发
前言 在Firefox下可用的npapi插件,在chrome下调用时遇到问题,于是尝试研究chrome下的ppapi插件,一路上真是磕磕碰碰,波折不断啊. 阶段一.复用npapi 尝试将npapi直接 ...
- JAVA基础知识之网络编程——-基于AIO的异步Socket通信
异步IO 下面摘子李刚的<疯狂JAVA讲义> 按照POSIX标准来划分IO,分为同步IO和异步IO.对于IO操作分为两步,1)程序发出IO请求. 2)完成实际的IO操作. 阻塞IO和非阻塞 ...
- Android中XML解析
package com.example.thebroadproject; public class Book { private int id; private String name; privat ...
- Mysql-学习笔记(==》约束 六)
-- 建立表的相关约束主键约束 PRIMARY KEY (主键自带索引 PK 关系数据库领域,要求一个表只有一个主键)CREATE TABLE t1( tid INT UNSIGNED NOT NUL ...
- Datagrid扩展方法InitEditGrid{支持单元格编辑}
//-----------------------------------------------------------------/******************************** ...
- IIS与Apache共用80端口方法[试用成功]
然后假设apache服务器已经安装完成,打开httpd.conf配置文件,找到这些地方去掉#开启代理模块: LoadModule proxy_module modules/mod_proxy.so L ...
- Java动态代理 cglib
代理模式:为某些对象提供代理以实现对这个对象的访问. 对一个对象进行访问控制的原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化. 一般包括以下组件: 被代理者接口:提供被代理者的访问途径. ...
- 关于Android6.0之后的权限问题
https://github.com/mylhyl/AndroidAcp AndroidAcp 使用: 加入 compile 'com.mylhyl:acp:1.1.7' PermisionUtils ...