1. 如果已经启动了四个Activity:A,B,C和D。在DActivity里,我们要跳到B Activity,同时希望C,Dfinish掉,可以在startActivity(intent)里的intent里添加flags标记,如下所示:
- Intent
intent = new Intent(this, B.class); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(intent);
2. 如果已经启动了四个Activity:A,B,C和D,在D Activity里,想再启动一个ActvityB,但不变成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标示。
FLAG_ACTIVITY_NO_HISTORY
意思就是说用这个FLAG启动的Activity,一旦推出,他就不会存在于栈中,原来是A,B,C这个时候再C中以这个FLAG启动D的
FLAG_ACTIVITY_BROUGHT_TO_FRONT
这个意思是重新创建一个新的Activity(即便堆栈中已经存在这个Activity),并提到栈顶。
比如,A,B,C,D都是标准加载,然后我在D中启动A,这个intent加上FLAG_ACTIVITY_BROUGHT_TO_FRONT
FLAG_ACTIVITY_REORDER_TO_FRONT区别
这个的意思是如果栈里已经存在,则将它拿到栈顶,不会启动新Activity。比如栈中有A,B,C三个Activity。此时在C中启动A的话,这时候栈的顺序为B,C,A。
参考:
Intent对象在Android开发中起着举足轻重的作用,其内置了丰富的常量,用于传递数据,下面本文将介绍跟Task有关的一些Flag参数,各参数的理解均来自AndroidAPI和本人在实际项目中的体验,如果有描述不当之处,还请各位不吝赐教。
FLAG_ACTIVITY_BROUGHT_TO_FRONT:这个标志一般不是由程序代码设置的,如在launchMode中设置singleTask模式时系统帮你设定。
FLAG_ACTIVITY_CLEAR_TOP: 如果目标Activity已经运行于当前的Task中,则关闭ActivityStack中在此Activity上方的所有Activity,然后将此Intent传递到该Activity实例内。例如,假设一个Task的ActivityStack中包含这些Activity:A,B,C,D。如果D调用了startActivity(),并且Intent指向B,那么,C和D都将结束,然后B接收到这个Intent,因此,目前stack的状况是:A,B。
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET: 如果设置,这将在Task的ActivityStack中设置一个还原点,当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:
FLAG_ACTIVITY_NO_HISTORY:新的Activity将不再历史stack中保留。一旦离开,此Activity就关闭了。
FLAG_ACTIVITY_NO_USER_ACTION:
FLAG_ACTIVITY_PREVIOUS_IS_TOP: If set and this intent is beingused to launch a new activity from an existing one, the currentactivity will not be counted as the top activity for decidingwhether the new intent should be delivered to the top instead ofstarting a new one. The previous activity will be used as the top,with the assumption being that the current activity will finishitself immediately.
FLAG_ACTIVITY_REORDER_TO_FRONT:这个标志将引发已经运行的Activity移动到历史stack的顶端。
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED: If set, and this activity iseither being started in a new task or bringing to the top anexisting task, then it will be launched as the front door of thetask. This will result in the application of any affinities neededto have that task in the proper state (either moving activities toor from it), or simply resetting that task to its initial state ifneeded.
FLAG_ACTIVITY_SINGLE_TOP:
上面纷杂的Intent内置参数在简单的Android应用时,可以启到比较好的控制作用,但是一旦Android应用过于复杂,那么自定一个ActivityList以管理Activity不失于一种更好更高效的管理方法。