Android SingleTask使用注意点

深入解析Android中的singleTask Activity启动模式及其示例代码 standard启动模式是Activity的默认启动方式,每次启动Activity都会创建一个新的实例。无论是否已经存在该Activity的实例,系统都会创建新的Activity实例并将其放入任务栈顶。这种模式适合于大多数常规的应用场景,它简单直接,但也会导致Activity实例增多,进而消耗更多的内存资源。singleTask模式保证系统中仅存在一个Activity实例,且这个实例会在新的任务栈中。当启动具有singleTask启动模式的Activity。 阅读详情

现象
今天在编写代码的时候,涉及到两个Activity通过Intent来传值的问题。具体描述为:activity A调用startActivityForResult()函数启动Activity B,然后B结束时通过setResult()函数将一些值回传给A。笔者过去使用这种方法很多次,屡试不爽。但是,今天居然出现了一个奇怪的现象,即从B跳回A后并没有按照预想的逻辑执行,通过抓Log发现,
当从A启动B的时候,A中的onActivityResult()和onResume()函数均被执行。完全不符合逻辑。
有人提到这可能与将要跳转的Activity B的启动模式相关。
特别是当Activity使用singleTask模式启动的时候,不能使用startActivityForResult()函数,否则就会出现立即执行onActivityResult()函数。

解决方法

 将要跳转的Activity B的启动模式改为标准模式,问题得到解决。

分析

从柯元旦的《Android 内核剖析》的第十章“Ams内部原理“10.1.3中有这样的一段话:请注意:SINGLE_TASK标识以及SINGLE_INSTANCE两个标识必 须在r.result==0的条件中,即这两个标识只能用在startActivity()的方法中,而不能使用在 startActivityForResult方法中。因为从Task的角度看,Android认为不同Task之间的Activity是不能传递数据 的,所以不能使用NEW_TASK标识,但还是要调用forResult方法。

这里写图片描述
如图:假设当前的应用程序存在两个栈:其中一个直接显示在屏幕上负责与用户完成交互,叫BackStack;另一个是隐藏在后台的background task,且位于该栈顶的Activity Y的启动模式被设置为singleTask。
如果Activity 2中调用background Task中已经启动过的Activity Y,则background Task内占据屏幕并且将该Task下所有的栈保留当前的栈位置和顺序push进back Task形成新的结构。在Activity界面按返回键,则Activity Y出栈,Activity X占据屏幕。
因此可见,由Activity2调用的Activity Y,但返回键后,回退显示的是Activity X。 所以,即使在Activity执行setResult()函数,Activity2也是无法接收到的。

  由于这种现象的存在,所以android系统处于某种保护机制,发现将要跳转的Activity的启动模式是singleTask时,若需要执onActivityResult()函数则立即执行。这样就好理解多了

在ActivityA中,startActivityForResult到ActivityB,其中ActivityB设置为SingleTask。

那么在实际出现的现象为:

ActivityA的onActivityResult将会首先被回调,然后再执行ActivityB的onCreate函数,也就说无论ActivityB返回什么内容,在ActivityA中都不会被接收到。

所以在使用SingleTask的方法不要随便使用。

另外onNewIntent()就是针对SingleTask使用的回调,当执行调用多个Activity对象的时候,会回调onNewIntent对象。

用OpenCV+ROS实现焊接机器人智能纠偏:线激光视觉的算法调参全流程 本文详细介绍了基于OpenCV和ROS的焊接机器人智能纠偏系统全流程。通过线激光视觉系统实时感知焊缝,重点解析了抗干扰图像预处理、改进的Steger算法提取激光条纹中心线,以及从2D像素到机器人基坐标系的完整坐标变换。该系统为应对焊接飞溅、弧光等复杂工况,实现高精度实时路径纠偏提供了从算法优化到工程集成的完整解决方案。 阅读详情

相关推荐

(3万字深度解析)Kaggle《房价预测:高级回归技巧》详解复现攻略

在这篇教程式文章中,我们从零开始完成了 Kaggle《房价预测:高级回归技巧》比赛的复现工作,涵盖了数据预处理、特征工程、模型训练、调优、解释和融合的完整流程。深入理解数据:阅读数据描述,结合常识对每个特征作出合理处理(如缺失值填充’None’表示无此设施 、异常值剔除 等)。对目标和偏态特征进行对数变换,使分布更平滑,从而更好满足模型假设并提升准确度。特征工程:我们创造了总面积、总浴室等新特征,整合信息提高模型可学习性。

qq_38334677的博客 1776

Android四个启动模式

目录 standard: singleTop: single Task:  singleInstance: standard: standard是四个启动模式中的 默认模式,可以不用写配置。在这个模式下,都会默认创建—个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity:叠加。 例如:创建一个activity将它命名为a,这个activity上边有个按钮...

墨漓 625

最近爆火的 Ontology 本体是什么?一文看懂基础概念 + 落地实操

1993 Tom Gruber原版定义:本体是对领域概念化模型的显式形式化规范。1998 Studer完善通用定义:本体是共享、明确、形式化的领域概念模型规范。大白话翻译:本体就是机器能看懂的行业词典+业务规则手册。数据库只管存数据,本体只管定规则,知识图谱是规则+数据结合体。区别于普通开源本体工具,这款国产商用本体平台核心优势:业务沙盘推演、可控业务数据写回、全链路字段级数据血缘审计,适配企业生产级业务落地。

驽马不舍 368

解开Android应用程序组件Activity的"singleTask"之谜

在Android应用程序中,可以配置Activity以四种方式来启动,其中最令人迷惑的就是"singleTask"这种方式了,官方文档称以这种方式启动的Activity总是属于一个任务的根Activity。果真如此吗?本文将为你解开Activity的"singleTask"之谜。 在解开这个谜之前,我们先来简单了解一下在Android应用程序中,任务(Task)是个什么样的概念。我们...

oraclestudy 760

Verilog单周期CPU设计(超详细)

实验 单周期CPU一、设计目的与目标实验内容实验要求二、课程设计器材硬件平台软件平台三、 CPU逻辑设计总体方案指令模块MIPS指令格式指令处理流程数据通路总体结构图设计流程逻辑图四、模块详细设计PCAdd4PCINSTMEMDATAMEMSHIFTER32_L2SHIFTER_COMBINATIONMUX4X32MUX2X5EXT16T32MUX2X32CONUNITREGFILEALUSing...

Ace Cheney的博客 9万+

Palabos User Guide中文解读 | 第五章 | Palabos编程 (跳过了第四章Palabos-Java接口)

作者的话:本人在学习palabos时,发现国内中文资料甚少,恰好网上可以直接搜到palabos user guide这种英文资料,加之时间充裕,便打算开始翻译,翻了一节后发现这可能算侵权,就比较伤脑筋,突然想到自己写中文解读即可,便有了下面的博客。 Palabos User Guide Release 1.0 r1 Copyright © 2019 University of Geneva Jul...

Yulan Fang's notes. 2298

Android - singleTask启动模式详解

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

m0_61549984的博客 1526

脑机接口(BCI)从原理到开发实战 09|SSVEP应用:通过视觉刺激控制设备

本文介绍了稳态视觉诱发电位(SSVEP)脑机接口技术。SSVEP是一种高效的非侵入式BCI范式,当用户注视特定频率闪烁的视觉刺激时,大脑枕叶会产生对应的节律性响应。文章详细阐述了SSVEP的神经机制、刺激范式设计、数据预处理方法,重点讲解了典型相关分析(CCA)这一核心识别算法。相比运动想象和P300范式,SSVEP具有信息传输率高(60-100 bits/min)、信号稳定、无需训练等优势,在高速拼写、设备控制等领域应用广泛。文章还提供了完整的电极选择、滤波、分段等预处理流程,以及CCA和滤波器组CCA的

小明的博客 1359

Activity启动模式singleTask的理解

1. Activity启动模式singleTask的理解 2. Task与Activity栈 3. singleTask设置方式 4. singleTask的意义(作用) 4.1. 举例说明 4.2. 例子1 4.3. 例子2 4.4. 小结 5. taskAffinity属性 5.1. 配置方式 5.2. 意义(作用) 5.3. 举例 5.4. 回退顺序 5.5. 总结 1. Activity启动模式singleTask的理解 2. Task与Activity栈 Task是一些Acti..

fxjzzyo的博客 2万+

html2canvas - 解决截图后引入的字体样式丢失问题,第三方字体截图导出图片后字体失效,html2canvas截屏生成图片后艺术字体就丢失并且自动转成常规字体了,特殊字体显示不了无法截图怎么办

vue2,vue3,uniapp,html2canvas截图后引入的字体样式丢失,html2canvas艺术字截图不显示,使用外部字体无效,html2canvas无法识别网络字体文件怎么办,ttf文件,网页使用在线字体链接利用html2canvas无法截取,字体样式没有了,font-family第三方字体,@font-face引入本地字体文件后无法被html2canvas识别怎么办,html2canvas文字消失,vue页面正常显示艺术字体但截屏后没有,html2canvas截图存在特殊字体时截图不全,默认

✅ 精选推荐文章 1万+

2025华为OD 面试手撕代码真题【字符串至多删除一个字符,是否能构成回文串】

2025华为OD 面试手撕代码真题【字符串至多删除一个字符,是否能构成回文串】

MISAYAONE的博客 1708

Activity中的四种启动模式

Activity的四种启动模式 1.standard模式     standard是Activity默认的启动模式,每当启动一个新的Activity,它就会进入任务栈,并处于栈顶位置 首先建一个activity,并放入一个Button,并运行到模拟器上。图示如下: 每点击一次按钮将会有一个Activity入栈。图示如下: 并且在我们的编辑器上面monitor下会看到。每点

sandma的博客 395

sap资产post记录查询时候 报错 如图

SAP资产过账查询报错AA653解决方案摘要 错误原因:系统无法计算会计年度期间的最后一天,导致资产折旧/过账失败。常见原因包括:1)未创建2025年期间版本;2)期间日期映射不完整;3)依赖日历但未生成2025年日历。 解决方法: 通过OB37维护2025年12/13个完整期间 补充缺失期间或修正结束日期 使用SCAL生成2025年工厂日历 验证步骤: 检查T009R表2025年记录完整性 测试AFAB折旧运行 重新查询资产过账 提示:建议财务团队统一维护跨年度期间数据,并在测试系统验证变更。

金牌架构师 835

android singleTask几个注意点

android官网地址:[url]http://developer.android.com/guide/components/tasks-and-back-stack.html[/url] 1、从当前activity A启动一个singleTask的activity B,如果B已经存在于一个background task,也就是说,B所在的application启动了,那么A启动B后,B所在...

uuubd的专栏 337

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

一起看看 Activity启动模式

小程序开发教程主要介绍了Activity启动模式的相关资料 推荐(免费):小程序开发教程 前言 平常我们启动活动的时候就是直接startActivity或许并没有注意活动的启动模式,默认情况下都是以默认的启动模式启动。但启动模式有时候是比较重要的。例如一个活动你想他只启动一次不要有多个实例,那么你可能需要把他设置为singleTask模式。所以有必要了解一下这一些启动模式。同时要注意一下,启动模式≠启动方式,启动方式是指显示启动和隐式启动,不要混淆,显示启动和隐式启动后续我会有专门的文章讲解。 关于任务栈简

hdl17822307857的博客 108

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android 启动模式及singleTask与Home键存在的问题

目录 一、前言 二、查看Log日志过程 三、问题分析(标红要注意) 四、原理分析 五、解决方式 一、前言 在项目设计中,经常用到点击“退出”,需要清除掉所有Activity,跳转到登录页面。所有采用Android的启动模式。 standard标准模式,也是activity的默认启动模式。在这种模式下activity可以被多次实例化,即在同一个栈中可以存在多个activity的实例...

csdn_aiyang的博客 6303

Android SingleTask 探究

Android 启动模式

fenglincanyi的博客 1346

Android - Activity 的 Launch mode详解 于 singleTask正解

1. Activity的Launch mode详解 singleTask正解 本文参考了此文http://hi.baidu.com/amauri3389/blog/item/a54475c2a4b2f040b219a86a.html 另附 android task与back stack开发文档翻译 参见:http://mypyg.iteye.com/blog/9196

原小明 4909

startactivityforresult的使用,和singleTask不能使用的问题

一、基本用法使用startActivityForResult开启页面的时候,当目标页面关闭的时候,可以回传数据给启动页面,比如ActivityA 使用startActivityForResult 启动ActivityB 则ActivityB关闭的时候,可以返回结果给ActivityA 其中 启动页面ActivityA用到的函数有: startActivityForResult(intent, r

kangyouv的博客 2738

Android Activity启动模式设置为SingleTask需要注意的地方

Android Activity启动模式设置为SingleTask需要注意的地方 当Activity跳转到启动模式为SingleTask的Activity的时候,onRestart()不再回调,而是回调 onNewInstance(Intent intent) 方法,其中参数可以从intent中获取 Activity的四种启动模式: standard 模式启动模式,每次激活Activi...

weixin_37322501的博客 1434

Android四种启动模式详解Standard,SingeTop,SingleTask,SingleInstance

Android四种启动模式详解 图解 安卓中Activity(活动)的四种启动模式,对应实际项目中不同场景的使用至关重要。因此如何使用这四种启动模式,对于Android开发者来说是十分重要的。安卓中使用任务栈stack来管理Activity的实例,栈的特点是“先进后出,后进先出”。 - 举个抽象的例子:洗碗的时候,碗会一个一个的叠着。所以第一个洗干净的碗往往是最后用来盛饭的,因为它...

知琦然的博客 1079

Android启动模式需要注意的点

Android的四种启动模式大家都比较清楚,就是standard、singleTop、singleTask、singleInstance,接下来说下其中需要注意的点 singleTop、singleTask、singleInstance启动模式的Activity被多次通过Intent方式进入后,不会重复onCreate而是执行onNewIntent方法; 启动顺序为:ActivityA->...

巴黎会飞的猪 456
上一篇: 自定义View中的事件
下一篇: 如何研究透一家公司:此文烂熟于心,将终生受益
Tectool
博客等级 码龄11年 11粉丝 13原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值