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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • PDF工具_PDF editor

    PDF工具_PDF editor《Linux多线程服务端编程——使用muduoC++网络库》这本书是我自己用LaTeX排版的,在排版过程中也积累了一些小工具,今天把其中几个发布出来。这几个工具都直接基于开源的iText库,可从 http://itextpdf.com/ 下载。下载Groovy版本位于 https://github.com/chenshuo/typeset/tree/master/tools

  • vue md编辑器_vue代码编辑器

    vue md编辑器_vue代码编辑器vue3简单的md编辑器

  • 群、环、域的概念,定义和理解.

    群、环、域的概念,定义和理解.群、环、域的概念,定义和理解.以下链接很好的解释了群环域的概念.http://sparkandshine.net/algebraic-structure-primer-group-ring-field-vector-space/群的定义:(Group)群是一个特殊的集合,这个集合需要满足4条性质.1,2,3,4blablabla,就叫1个群.也叫群公理定义.我这里要说的是,并不是每个集合都能够同时满足这4条性质的.例如第一条:totality,整体性或封闭性.集合中的两个

  • elementui树形控件_elementui树形控件筛选

    elementui树形控件_elementui树形控件筛选实现效果与原理我们希望实现鼠标移动至树型结构的结点上就显示按钮,移出就隐藏按钮实现原理:是通过@mouseenter和@mouseleave两个属性来控制鼠标hover的效果,再配合v-sho

  • 如何使用TCP Traceroute

    如何使用TCP Traceroute与发送UDP或ICMPECHO数据包的传统跟踪路由不同,TCP跟踪路由使用TCP数据包,因此可以绕过最常见的防火墙过滤器。请遵循以下说明以运行TCPTraceroute:对于Windows用户 对于Mac用户 对于Linux用户对于Windows用户,Windows没有本机实用程序来运行TCPtraceroute。要在Windows上运行它,您将需要安装WinPcap库并下载tracetcp实用程序。要安装WinPcap库,请执行以下步骤:1.下载WinPcap库。2.双击下载.

  • springcloud原理详解_SpringMVC运行原理

    springcloud原理详解_SpringMVC运行原理SpringCloudEureka原理分析一、Eureka的基础架构及服务治理机制  Eureka服务治理的基础架构包含三个核心:服务注册中心、服务提供者、服务消费者。其中服务注册中心,即Eureka提供的服务端,提供服务注册和发现的功能;服务提供者,即将自己的服务注册到注册中心;服务的消费者,从注册中心获取服务列表,从而使消费者知道到何处调用服务,服务消费可以使用Ribbon、Feign等。1、服务提供者:服务注册:服务提供者在项目启动时,会通过发送REST请求的方式将自己注册到eure

    2022年10月21日

发表回复

您的电子邮箱地址不会被公开。

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