首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Activity启动模式之FLAG_ACTIVITY_CLEAR_TOP

Activity启动模式之FLAG_ACTIVITY_CLEAR_TOP

作者头像
全栈程序员站长
发布2022-09-13 16:28:58
发布2022-09-13 16:28:58
1.1K0
举报

大家好,又见面了,我是你们的朋友全栈君。

关于Android的Intent.FLAG_ACTIVITY_CLEAR_TOP

代码语言:javascript
复制
如果设置,并且这个Activity已经在当前的Task中运行,
因此,不再是重新启动一个这个Activity的实例,而是在这个Activity上方的所有Activity都将
关闭然后这个Intent会作为一个新的Intent投递到老的Activity(现在位于顶端)中。 例如:假设
一个Task中包含这些Activity:A,B,C,D。如果D调用了startActivity(),并且包含一个指向
ActivityB的Intent,那么,C和D都将结束,然后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。
代码语言:javascript
复制
假如有以下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);

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160773.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于Android的Intent.FLAG_ACTIVITY_CLEAR_TOP
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档