记录Intent的几种Flag

2024-06-12 09:48
文章标签 记录 flag 几种 intent

本文主要是介绍记录Intent的几种Flag,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写的比较乱,只是作为自己的一个笔记,参考价值不高。

1. FLAG_ACTIVITY_NEW_TASK标签测试

2. FLAG_ACTIVITY_CLEAR_TOP标签测试

3. FLAG_ACTIVITY_CLEAR_TASK标签测试

4. FLAG_ACTIVITY_SINGLE_TOP标签测试

首先是新建两个Activity,分别为MainActivity和SecondActivity。两个Activity中绑定分别一个按钮

1.FLAG_ACTIVITY_NEW_TASK

MainActivity:

    public void onJump(View view){Intent intent = new Intent(this,SecondActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
//        Log.d(TAG,"create");Log.d(TAG, "1onCreate: "+this.toString()+", taskId="+this.getTaskId());}

SecondActivity

    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.second);Log.d(TAG, "2onCreate: "+this.toString()+", taskId="+this.getTaskId());}public void onBack(View view) {Intent intent = new Intent(this,MainActivity.class);startActivity(intent);}

这个时候,启动顺序是 MainActivity->SecondActivity->MainActivity->SecondActivity

启动提取日志:


结果分析:MainActivity和SecondActivity在同一个task中,依次按返回键退出的时候,会依次退出很多activity,说明是不同的activity实例。此时的FLAG_ACTIVITY_NEW_TASK并没有什么作用。

2.FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TOP一块应用,启动顺序依然是MainActivity->SecondActivity->MainActivity->SecondActivity,此时结果图



结果分析,依然在同一个task中,唯一不同的是,每次从MainActivity到SecondActivity的时候,会清除task中 SecondActivity上面的实例,也就是说,之创建了一个SecondActivity。
3,使MainActivity和SecondActivity在不同的 android:taskAffinity中。修改manifest


此时MainActivity中的启动SecondActivity的标签依然是FLAG_ACTIVITY_NEW_TASK,这时候启动MainActivity->SecondActivity->MainActivity->SecondActivity

结果是


在从MainActivity->SecondActivity->MainActivity之后,继续点击MainActivity中的onJump方法发现无反应,也就是说没法继续跳转。结果分析可得:跳转到SecondActivity后,只创建了一个实例,当从SecondActivity再次跳转到MainActivity后,SeconActivity实例保存在新的task底部,此时,顶部是同task中的MainActivity,然而MainActivity中启动flag是FLAG_ACTIVITY_NEW_TASK,无法清除位于栈顶的自己,所以无法跳转。



这篇关于记录Intent的几种Flag的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1053874

相关文章

Java中InputStream重复使用问题的几种解决方案

《Java中InputStream重复使用问题的几种解决方案》在Java开发中,InputStream是用于读取字节流的类,在许多场景下,我们可能需要重复读取InputStream中的数据,这篇文章主... 目录前言1. 使用mark()和reset()方法(适用于支持标记的流)2. 将流内容缓存到字节数组

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系