Activity启动模式之FLAG_ACTIVITY_CLEAR_TOP

关于Android的Intent.FLAG_ACTIVITY_CLEAR_TOP

如果设置,并且这个Activity已经在当前的Task中运行,
因此,不再是重新启动一个这个Activity的实例,而是在这个Activity上方的所有Activity都将
关闭然后这个Intent会作为一个新的Intent投递到老的Activity(现在位于顶端)中。 例如:假设
一个Task中包含这些Activity:A,B,CD。如果D调用了startActivity(),并且包含一个指向
ActivityB的Intent,那么,CD都将结束,然后B接收到这个Intent,因此,目前stack的状况是
A,B。 上例中正在运行的Activity B既可以在onNewIntent()中接收到这个新的Intent,
也可以把自己关闭然后重新启动来接收这个Intent。


如果它的启动模式声明为“multiple”(默认值),并且你没有在这个Intent中设置FLAG_ACTIVITY_SINGLE_TOP
标志那么它将关闭然后重新创建;对于其它的启动模式,或者在这个Intent中设置FLAG_ACTIVITY_SINGLE_TOP
标志,都将把这个Intent投递到当前这个实例的onNewIntent()中
这个启动模式还可以与FLAG_ACTIVITY_NEW_TASK结合
起来使用用于启动一个Task中的根Activity,它会把那个Task中任何运行的实例
带入前台,然后清除它直到根Activity。这非常有用,例如,当从Notification Manager处启动一个
Activity。
假如有以下3个Activity
A - B - C
当 B - A - B 跳转的时候,使用Intent的FLAG_ACTIVITY_CLEAR_TOP会让第一个B和第二个A,destory掉
但是当B - A - C跳转的时候不会调用B和A的destory
  • 针对该Intent配置的目标为FLAG_ACTIVITY_CLEAR_TOP, 表示如果在Activity栈中存在该Activity对象则不再创建对象,结束该对象之上的所有Activity回到该Activity上

  • 上面当A跳C的时候不满足此条件。
    当然如果你想实现这个效果可以使用:
    it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);

猜你喜欢

转载自blog.csdn.net/life_s/article/details/79637860
今日推荐