FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_F

1. 若是已经启动了四个Activity:A,B,C和D。在D Activity里,咱们要跳到B Activity,同时但愿C finish掉,能够在startActivity(intent)里的intent里添加flags标记,以下所示:html

Java代码  收藏代码app

  1. Intent intent = new Intent(this, B.class);   动画

  2. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  this

  3. startActivity(intent);  spa

 

  这样启动B Activity,就会把D,C都finished掉,若是你的B Activity的启动模式是默认的(multiple ,则B Activity会finished掉,再启动一个新的Activity B。orm

  若是不想从新再建立一个新的B Activity,则在上面的代码里再加上:xml

Java代码  收藏代码htm

  1. intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);   对象

 

 这样B Activity就不会再建立一个新的了,而是会重用以前的B Activity,同时调用B Activity的onNewIntent()方法。blog

 

2. 若是已经启动了四个Activity:A,B,C和D,在D Activity里,想再启动一个Actvity B,但不变成A,B,C,D,B,而是但愿是A,C,D,B,则能够像下面写代码:

Java代码  收藏代码

  1. Intent intent = new Intent(this, MainActivity.class);  

  2. intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);   

  3. 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不失于一种更好更高效的管理方法。



具体见:http://blog.sina.com.cn/s/blog_5da93c8f0101h78f.html

相关文章
相关标签/搜索