Android应用开发—setResult()的调用时机

Spring AI 项目实战(五):Spring Boot + AI + DeepSeek + Redis 实现聊天应用上下文记忆功能(附完整源码) 本文介绍了如何基于Spring Boot 3.2、Spring AI 1.0.0-M4、DeepSeek API和Redis构建具备上下文记忆功能的智能聊天应用。项目采用现代化技术栈,包括Java 17、Maven、Lombok等,实现了智能对话、会话管理、异常处理等核心功能。文章详细讲解了环境搭建、配置管理(含Redis和AI服务集成)、核心组件设计(如消息实体、控制器和服务层实现),以及完整的项目结构。该项目提供了美观的Web界面和REST API,支持对话上下文存储(通过Redis实现)和系统监控,可 阅读详情

本文转载自setResult()的调用时机,此处做了重新的排版,只是感觉markdown的排版比较好看些,侵删。

今天遇到这样一个问题,我在Activity-A中用startActivityForResult()方法启动了Activity-B,并且在B中通过setResult()方法给A返回值,由于某些原因不能在setResult()之后立刻调用finish()函数,只能通过用户按Back键自己退出到A。按理说从B退出回到Aactivity-A过程中,A中的 onActivityResult() 应该被调用, 可是通过log发现,整个操作过程中 onActivityResult() 始终没有被调用。 前后研究了半天才发现 是 setResult() 的调用时机不对造成的,因为在我是在B的onStop() 函数中调用setResult()函数的,这个时候的seResult是没有任何意义的,因为已经错过了A onActivityResult() 的调用时机。

因为在 B 退回 A过程中,执行过程是

B---onPause
A---onActivityResult
A---onRestart
A---onStart
A---onResume
B---onStop
B---onDestroy

从上面过程可以看出,首先是B处于Pause 状态,然后等待A执行 onRestart-> onStart ->onResume,然后才是B 的onStop->onDestroy,而A的 onActivityResult() 需要在B的onPause之后,A的onRestart之前这中间调用,所以B中的setResult()函数应该放在B的onPause之前调用。

另外我试验了一下,如果把setResult()放在 B 的 onPause() 里面调用,结果仍然是无效的。

那么setResult()应该在什么时候调用呢?从源码可以看出,Activity返回result是在被finish的时候,也就是说调用setResult()方法必须在finish()之前。所以在onPause、onStop、onDestroy方法中调用setResult()也有可能不会返回成功,因为这些方法调用不一定是在finish之前的 (why,to find out the reason),当然在onCreate()就调用setResult肯定是在finish之前的,但是又不满足业务需要。

实际使用场景有两个:

  • 按BACK键从一个Activity退出来的,一按BACK,android就会自动调用Activity的finish()方法。
@Override
 public void onBackPressed()
 {
        Log.i(TAG, "onBackPressed");
        setResult(Const.LIVE_OK);
        super.onBackPressed();
 }
  • 按点击事件中显式的调用finish()
setResult(RESULT_OK);
finish();

执行过程为:

B---onBackPressed
B---finish
B---onPause
A---onActivityResult
A---onRestart
A---onStart
A---onResume
B---onStop
B---onDestroy
uniapp [安卓苹果App端] - 实现获取请求手机位置权限+开启定位获取经纬度/省市区地址等,检测权限手机定位是否开启并引导用户同意授权,uniApp app端调用本机开启本机定位权限及IP属地 uni-app,手机定位权限,安卓Android,苹果ios,uniapp获取本机位置权限,uni-app获取用户定位数据,uniapp APP获取用户IP属地定位,判断权限,权限被拒绝了怎么办,苹果ios系统无法开启定位,获取定位权限报错,uniapp定位获取省市区,UNI-APP如何开启手机定位功能并获取经纬度,不依赖地图第三方插件组件,打包上架后如何获取,真机运行无法获取定位,安卓和ios权限获取,判断权限检查,正式打包,详细教程,根据获取当前经纬度,再根据经纬度去定位具体省市区,自定义基座打包能成功 阅读详情

相关推荐

解决若依Vue3前后端分离---路由切换时显示白屏

解决基于Vue3若依前后端分离项目中出现的路由正常切换但是就是不显示数据的问题,也就是不发起网络请求的问题。

简单点的博客 1605

android中setResult的调用时机

最近在做项目的过程中有需要用到返回值,但是由于需求比较复杂,感觉把setResult放到onStop中比较方便,但是发现在onStop中写入setResult(。。。)和finish()之后,跟本就不会回传值,后来又试了onPaulse和onDestroy均是不可以。 后来发现是因为错过了onActivityResult的调用时机,拿A跳转到B,B返结果给A作示例:因为在 B 退回 A过程中,首

Eric的博客 3190

Cyclone MAX独立编程实战:从硬件接口到SAP镜像的嵌入式烧录指南

在嵌入式系统开发与量产中,固件烧录是连接软件与硬件的关键环节。其核心原理是通过特定的调试接口(如JTAG、BDM)和编程算法,将编译后的机器码写入目标处理器的非易失性存储器。这项技术的价值在于确保软件在硬件上的可靠部署,是产品功能实现和质量保证的基础,广泛应用于汽车电子、工业控制等对一致性与可靠性要求极高的领域。独立编程器(Stand-Alone Programmer)在此基础上,通过集成存储、交互界面和任务逻辑,实现了脱离PC的自动化操作,极大提升了产线效率和现场维护的便捷性。本文以Cyclone MAX

weixin_34038293的博客 467

startActivityForResult中回调setResult注意事项.以及Task认识

一: 1.startActivityForResult的请求码要大于等于0 2.activity返回result是在被finish的时候,也就是说调用setResult()方法必须在finish()之前。 那么如果在如下方法中调用setResult()也有可能不会返回成功: onPause(), onStop(), onDestroy(), 因为这些方法调用不一定是在finish之前的,当

asd199205的博客 3032

Zlib1.2.11源码编译(Win10+VS2019)

下载 下载网址: zlib Home Site 得到文件: 解压缩到“D:\SourceCodes\zlib-1.2.11” 使用CMake配置、生成并打开项目 将CMakeLists.txt拖入CMake,配置(Configure): 生成(Generate) 打开项目(Open Project),CMake调用VS2019打开项目 生成debug版本 构建项目ALL_BUILD。成功生成debug版本 在“D:\Sourc...

Alexabc3000的专栏 1893

树莓派使用 OLED 屏显示图片及文字

树莓派默认是不带显示屏的,如果想要查看系统的一些信息,需要使用电脑登录到树莓派,或者通过 HDMI 连接外接显示器查看。这样做总是有点麻烦,我们可以通过外接一个 OLED 屏来显示一些关键参数或者图片。本文将详细介绍操作方法。 OLED 模组介绍 OLED 屏主要有两种:128×32 和 128×64 ,主要颜色是白、黄、蓝。OLED 屏的特点是功耗低,价格便宜,使用 I2C 接口与主机连接。本文所使用的是 128×64 尺寸的屏幕,外形如下: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直

码到成功 3743

setResult()后finish()失效问题

在做Android项目的时候,Intent传递了一个Bitmap的数组,在荣耀10上,finish()无效,界面没有关闭;后来改成将Bitmap存储成图片,将图片路径传递回去,问题解决。这里的原因可能与Intent传递数据长度受限,记录一下。 ...

SKYLY2的博客 1647

Conformal LEC逻辑等价性检查介绍和参考脚本

分为三个产品:Conformal L、Conformal XL、Conformal GXL。L是功能性检查,XL支持复杂数据通路的综合和APR优化,GXL支持定制的stdcell和定制memory的检查。Cadence Conformal Equivalence Checker,就是常说的LEC,可以用来验证RTL、门级网表、甚至spice网表的逻辑等价性。do文件是conformal的脚本文件,可以由综合工具(RTL Compiler/Genus)自己产生(write_do_lec),也可以手写。

NanDigits的博客 7250

【Android关键字】startActivityForResult/onActivityResult/setResult方法的使用

【Android关键字】startActivityForResult/onActivityResult/setResult方法的使用

丑小鸭 1776

SAP 批次管理

批次管理: 业务场景: 批次常用于:采购、生产、SD等: 1、先进先出,先入库的先出库(如何实现),基于入库时间来自动确定出库策略。 2、追塑:基于批次进行产品质量追溯 例如订单MTO ---> PP ----> MM(批次关联)。SO—>PP工单 --> 预留 --> 发料(基于批次A\B\C)-->产成品入库-->批次入库D--> ...

willieyuan的博客 1万+

直捣黄龙~

这篇文章描述了一个矩阵寻路问题,要求计算从起点到终点的最短路径数量及长度。主要思路是通过BFS算法解决:首先标记哨兵警戒区域为禁区,然后从起点出发进行广度优先搜索,记录每个位置的最短步数和路径条数。当到达终点时,输出路径数和步数;若不可达则返回(0,0)。算法使用队列实现BFS,同时处理路径统计和步数记录,适用于网格寻路类问题。

面试高手的博客 216

Android之setResult的用法

首先Activity:A跳转到Activity:B public static final int REQUEST_SEARCH = 100; Intent intent = new Intent(getActivity(), MapSearchDeviceActivity.class); startActivityForResult(intent, REQUEST_SEARCH); @O...

juer2017的博客 1万+

OmniParser V2 和 OmniTool 让 AI 来控制 Windows 设备

OmniParser V2 和 OmniTool 是由微软开发的一套工具,通过屏幕解析技术让 AI 能够理解和控制 Windows 设备。OmniParser V2 是一款数据解析工具,可以解读屏幕内容,并将内容传递给大模型OmniTool 则是一个运行 Windows Agent 的工具,提供 Windows 界面给 AI 操作。

简简单单Onlinezuozuo 2731

onActivityResult()和setResult()的调用时机

两个Activity之间传递数据,并保留用户最新编辑的数据 onActivityResult()和setResult()的调用时机

zhengpf的博客 3334

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android Activity 中 onActivityResult() 与 setResult()的调用时机

今天遇到这样一个问题,我在ActivityA中用startActivityForResult()方法启动了Activity B,并且在B中通过 setResult()方法给A返回值,由于某些原因不能在setResult ()之后立刻调用finish()函数,只能通过用户按Back键自己退出到 A。按理说从B退出回到AactivityA过程中,A中的 onActivityResult() 应该

liu_qiqi的专栏 1万+

VB摄像头监控

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

setResult()的调用时机

今天遇到这样一个问题,我在Activity-A中用startActivityForResult()方法启动了Activity-B,并且在B中通过setResult()方法给A返回值,由于某些原因不能在setResult()之后立刻调用finish()函数,只能通过用户按Back键自己退出到A。按理说从B退出回到Aactivity-A过程中,A中的 onActivityResult() 应该被调用,

j08006869966的博客 644

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android setResult()的调用时机

今天遇到这样一个问题,我在Activity-A中用startActivityForResult()方法启动了Activity-B,并且在B中通过setResult()方法给A返回值,由于某些原因不能在setResult()之后立刻调用finish()函数,只能通过用户按Back键自己退出到A。按理说从B退出回到Aactivity-A过程中,A中的 onActivityResult() 应该被调用,

ybw486的博客 2946

android OnActivityResult()的调用时机问题

今天遇到这样一个问题,我在ActivityA中用startActivityForResult()方法启动了Activity B,并且在B中通过 setResult()方法给A返回值,由于某些原因不能在setResult ()之后立刻调用finish()函数,只能通过用户按Back键自己退出到A。按理说从B退出回到AactivityA过程中,A中的 onActivityResult() 应该被调用...

weixin_34404393的博客 2480

Android初学习 - Activity 中 onActivityResult() 与 setResult()的调用时机

在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。这样的数据交流就要用到回调函数onActivityResult。 startActivityForResult(Intent intent, int requestCode); 第一个参数:一个I

myKernel 723

Activity的setResult方法

今天遇到这样一个问题,我在ActivityA中用startActivityForResult()方法启动了Activity B,并且在B中通过setResult()方法给A返回值,由于某些原因不能在setResult ()之后立刻调用finish()函数,只能通过用户按Back键自己退出到A。按理说从B退出回到AactivityA过程中,A中的onActivityResult() 应该被调

dinglin_87的专栏 2万+

Android开发——onActivityResult()和setResult()调用问题

今天学习了活动的生命周期。联想到昨天学习的向上一个活动传递消息。由此我就想到能不能在onDestroy()方法中调用setResult()来传递参数。经过试验后发现这时候调用并不能够有效传递参数。 具体实施方法是: 创建了一个ActivityA并从这里用startActivityForResult()启动ActivityB,在返回A时在B的onDestroy()方法中调用setResult(),此时A中的onActivityResult()再被调用,完成传参。 但是当我实验后通过log发现,不论我在onPa

qq_40689705的博客 887

setResult的详解

可 以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个 Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,并调用前一个T1Activity中的 onActivityResult( )方法。那什么时候去调用setResult()方法返回数据呢?那么如果在如下方法中调用setResult()也有可能不会返回成功: onPause(), onStop(), onDestroy(),

HakuMaster的博客 729
上一篇: Android Studio常用快捷键
下一篇: 音视频多媒体协议相关资料汇总
voidreturn
博客等级 码龄10年 53粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值