singTask和FLAG_ACTIVITY_CLEAR_TOP的区别

singTask和FLAG_ACTIVITY_CLEAR_TOP的区别假设所有的activity启动方式是standard,两者的区别就是1.intent中的flag为FLAG_ACTIVITY_CLEAR_TOP时,将指定activity上面的其他activity出栈,指定activity位于栈顶,但是可以使用已有的实例或者重新创建一个实例,取决于是否加一个FLAG_ACTIVITY_SINGLE_TOP标志如果加了,则不会重建实例,在onNewIntent()

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

假设所有的activity启动方式是standard,两者的区别就是

1. intent中的flag为FLAG_ACTIVITY_CLEAR_TOP时,

将指定activity上面的其他activity出栈,指定activity位于栈顶,但是可以使用已有的实例或者重新创建一个实例,取决于是否加一个FLAG_ACTIVITY_SINGLE_TOP标志

  • 如果加了,则不会重建实例,在onNewIntent()中获取intent;
  • 如果不加,销毁并且重建activity实例,intent在onCreat中获取,为了使onNewIntent()和onCreat()去的同一个intent,则让他们访问同一个函数,获取现有的intent对象。

2.singleTask这个启动方式,

如果已经存在指定的activity,那么会将指定的activity前面的实例全部销毁,将指定的实例放在栈顶,并且能够确定是单一activity,不会销毁重建,始终使用同一个activity,这就是两者最主要的区别。

3.Activity启动方式有四种,分别是:

standard
singleTop
singleTask
singleInstance

4.关于Android的Intent.FLAG_ACTIVITY_CLEAR_TOP

今天写代码遇到了一个问题:有如下几个Activity

A – B – C

当 B – A – B 跳转的时候,使用Intent的FLAG_ACTIVITY_CLEAR_TOP会让第一个B和第二个A,destory掉

但是当B – A – C跳转的时候不会调用B和A的destory

其实这个问题以前遇到过,今天遇到的时候又忘记了。查看API文档才发现原因,所以这里记录一下避免下次又忘记了:

public static final int FLAG_ACTIVITY_CLEAR_TOP
Added in API level 1

If set, and the activity being launched is already running in the current task, then instead of launching a new instance of that activity, all of the other activities on top of it will be closed and this Intent will be delivered to the (now on top) old activity as a new Intent.

文档上说,如果设置这个属性,是当要启动的Activity已经存在当前Task中,才会在启动的时候销毁其他的Activity。

所以上面当A跳C的时候不满足此条件。

当然如果你想实现这个效果可以使用:

it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);

不过不幸的是,此方法要求最低API为11

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年7月17日 下午2:16
下一篇 2022年7月17日 下午2:16


相关推荐

  • keras 学习率设置「建议收藏」

    keras 学习率设置「建议收藏」转载自https://blog.csdn.net/zzc15806/article/details/79711114Keras提供两种学习率适应方法,可通过回调函数实现。1.LearningRateSchedulerkeras.callbacks.LearningRateScheduler(schedule)该回调函数是学习率调度器.参数   schedule:函数,该函数…

    2022年5月23日
    31
  • pandas数据清洗详细教程_excel数据清洗工具

    pandas数据清洗详细教程_excel数据清洗工具Pandas数据清洗常见方法01读取数据df=pd.read_csv(‘文件名称’)02查看数据特征df.info()03查看数据量df.shape04查看各数字类型的统计量df.describe()05去除重复值df.drop_duplicates(inplace=True)06重置索引data.reset_index(inplace=True,drop=True)07查看缺失值信息data.loc[data[‘列名’].isnull()]01

    2025年9月27日
    4
  • ARP欺骗原理_ARP欺骗实验

    ARP欺骗原理_ARP欺骗实验一.arp欺骗的原理 以太网设备(比如网卡)都有自己全球唯一的MAC地址,它们是以MAC地址来传输以太网数据包的,但是以太网设备却识别不了IP数据包中的IP地址,所以要在以太网中进行IP通信,就需要一个协议来建立IP地址与MAC地址的对应关系,使IP数据包能够发送到一个确定的主机上。这种功能是由arp(AddressResolutionProtocol)来完成的。 arp被设计成用来实现

    2025年7月30日
    4
  • django 自定义过滤器_mvc自定义过滤器

    django 自定义过滤器_mvc自定义过滤器前言虽然DTL给我们内置了许多好用的过滤器。但是有些时候还是不能满足我们的需求。因此Django给我们提供了一个接口,可以让我们自定义过滤器,实现自己的需求。自定义过滤器首先在某个app中,创建

    2022年8月7日
    7
  • 海量数据挖掘MMDS week3:社交网络之社区检测:高级技巧「建议收藏」

    http://blog.csdn.net/pipisorry/article/details/49052255海量数据挖掘MiningMassiveDatasets(MMDs)-JureLeskoveccourses学习笔记之社交网络之社区检测:高级技巧-线性代数方法{这篇博客的内容:使用linearalgebra的概念来解释如何breakgraphsoptimally(i.e

    2022年4月14日
    40
  • Java 唯一ID生成器「建议收藏」

    Java 唯一ID生成器「建议收藏」前言:   前段时间,写了一个ID生成,发在群里,结果遭到别人嘲笑,心有不甘,于是思来想去,决定在重新写一个ID生成器。此方法生成的ID理论上也是会有重复,但是这个概率太低太低,低到可以忽略不计。原理:使用当前时间戳+指定长度的随机数,并随机打乱字符串。可以生成指定长度的纯数字的ID。具体实现代码:/***普通Id生成器,用时间戳生成+2位随机数生成,*此方法

    2022年6月16日
    421

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号