使用EventBus代替startActivityForResult向上传递数据

Android startActivityForResult 过时的替代方法。registerForActivityResult用法 由于startActivityForResult()方法不再推荐使用,谷歌工程师推荐使用registerForActivityResult方法。页面A向页面B跳转并传递数据,页面B处理完再跳转到页面A,同时把数据传递给页面A。 阅读详情

这几天接触了下EventBus,EventBus是一款针对Android优化的发布/订阅事件总线。对于Fragment和Fragment通信,Service和Fragment通信,EventBus是一个不错的选择。

以前我们如果想要在Activity之间向上传递数据,都会采用startActivityForResult()方法来实现。其实用EventBus也能实现这个功能。

首先新建一个事件类ForTopEvent:


比如要从SecondActivity往FristActivity传递数据,那么SecondActivity是发送数据的页面,FristActivity就是接受数据的一方。

在SecondActivity中发送数据,可以写在onClick()事件中:

在FristActivity中注册EventBus:


也要在FristActivity的onDestroy()中解除EventBus注册:


在FristActivity中接收数据,这里使用的是onEventMainThread(),使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行。:


EventBus还有另外3个接收消息的函数:

1.onEvent:如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。

2.onEventBackgroundThread:如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。

3.onEventAsync:使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync.

至此我们已经在FristActivity中接收了来自SecondActivity的消息。但是使用EventBus没有办法实现从FristActivity传递数据给SecondActivity,因为当FristActivity发出数据的时候,SecondActivity还没有被创建,所以没有办法接收来自FristActivity的数据,同样的如果在开启SecondActivity的时候把FristActivity finish了,那么FristActivity也同样无法接收到消息(其实是废话)。。



Android startActivityForResult 过时的替代方法(解释了跳转报错问题) Android api29中startActivityForResult提示已过时,应该变成registerForActivityResult,下面做了简单的跳转携带数据和返回数据。 阅读详情

相关推荐

Android记事本开发实战:从SQLite到RecyclerView的完整CRUD实现

在Android应用开发中,数据持久化与高效UI展示是两大核心基础。SQLite作为Android内置的轻量级关系型数据库,提供了本地结构化数据存储的可靠方案,其通过SQLiteOpenHelper进行数据库创建与版本管理,是实现CRUD(增删改查)操作的关键。RecyclerView则是现代Android列表展示的标准组件,通过Adapter模式高效管理视图复用,大幅提升了长列表的性能与灵活性。结合Material Design设计语言,开发者能够构建出既美观又流畅的用户界面。这些技术共同支撑了诸如记事本

weixin_30787531的博客 342

startActivityForResult 替代方案

startActivityForResult 替代方案 startActivityForResult() 方法用于返回数据给上一个 Activity。 但这个方法已经被废弃了很久,现在 Google 使用 registerForActivityResult() 方法来实现此功能。 registerForActivityResult() 实现 使用 registerForActivityResult() 写法,实现 SecondActivity 返回数据给 FirstActivity FirstActiv

jiaweilovemingming的博客 6776

startActivityForResult已被废弃,使用registerForActivityResult替换

startActivityForResult已被废弃,使用registerForActivityResult替换

海阔天空 5135

StartActivityForResult方法被弃用的替代方案

StartActivityForResult的替代方案StartActivityForResult方法被弃用的替代方案 StartActivityForResult方法被弃用的替代方案 使用registerForActivityResult进行替代, 亲测可用 首先创建一个Contract Class implements ActivityResultContract<X, Y>, 重写 creatIntent, parseResult X, Y 分别指传入参数和传出参数 class Contr

Nexas的博客 9462

【PADS-开发指南】

馒头破戒大师

sinat_23896491的博客 3222

DoubletFinder实战:如何优化参数提升scRNA-seq双细胞识别准确率?

本文深入探讨了如何通过优化DoubletFinder参数提升scRNA-seq双细胞识别准确率。详细解析了pK和nExp参数的影响机制,提供了系统化的参数优化流程和多样本整合策略,并结合真实数据集演示了验证方法与高级应用场景,帮助研究人员获得更可靠的分析结果。

weixin_28523493的博客 339

关于BroadCast,startActivityForResult以及EventBus

BroadCast的使用 1.动态注册广播:第一个界面public class MainActivity extends AppCompatActivity { //声明广播 private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onRec

qq_27840511的博客 560

使用PyTorch设计卷积神经网络(CNN)来处理遥感图像Indian Pines数据集

使用PyTorch设计卷积神经网络(CNN)来处理遥感图像Indian Pines数据集

XAX520_1314的博客 2490

EventBus使用简介

EventBus使用简介

asdgbc的专栏 458

Claude Code 错误解决方案: Request Timed Out 超时 原因、配置与解决方案

Claude Code 抛出 Request Timed Out 不仅可 能是网络问题,更大概率是 API 高负载或超大响应导致。本文从 默认超时机制出发,拆解三种根因场景,给出 API_TIMEOUT_MS 环境变量调优与任务拆分策略,帮助开发者在保证稳定性的同时 避免误判网络故障。

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 899

GEE数据融合——Landsat (collection 2,level 2 )4、5、7、8、9长时间序列影像数据融合和视频导出分析

长时间序列影像数据融合是指将Landsat影像数据集合2级2(Level 2)中的4、5、7、8和9这五个卫星的数据进行融合。具体来说,这包括将同一地点的多个卫星影像数据进行处理和整合,以产生一个单一的、具有更高质量的影像产品。在长时间序列影像数据融合中,首先需要对不同卫星的影像数据进行校正,以消除不同卫星之间的光谱差异、辐射度问题和几何纠正误差等。然后,通过使用融合算法,将多个卫星的影像数据进行组合,以生成一张全新的、高质量的合成影像。

此星光明博客 1733

在fragment传递数据给非宿主Activity(记录)

最近在做个项目用到在一个Activity跳转到另一个Activity,这另一个Activity又包含两个fragment。功能如图 一开始我在Fragment里用Intent传递数据,用startActivity,可以跳转界面但Activity接收不到数据。 后面我把startActivityForResult,在Activity可以接受到数据了。**但是!**因为用startActivit...

weixin_44371043的博客 567

机器人环境仿真软件:Gazebo_(6).传感器仿真

通过 Gazebo 和 ROS,我们可以方便地配置和使用多种传感器,进行机器人环境的仿真和调试。传感器仿真不仅帮助我们验证和测试机器人的感知能力,还可以在真实部署前发现和解决潜在的问题。本节详细介绍了如何在 Gazebo 中配置激光雷达、摄像头、IMU、声纳和 GPS 传感器,并展示了如何在 ROS 中接收和处理这些传感器数据。此外,还介绍了多传感器融合的基本方法和调试工具,希望这些内容能对你的机器人仿真工作有所帮助。

kkchenjj的博客 1388

2024年最全如何优雅地构建易维护、可复用的 Android 业务流程,华为面试题解析视频

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。还有。

2401_84563179的博客 821

AgentScope Java 2.0 项目实战:从零构建企业级自主Coding Agent

本文基于 AgentScope Java 框架,完整拆解两个生产级 AI Agent 项目的从零开发全过程。其一是企业级自主编码机器人(agentscope-codingagent),支持 Issue→PR 自动实现、PR Code Review、Docker 沙箱隔离执行与多通道接入;其二是个人 AI 助手管理平台(agentscope-paw),采用 Spring Boot + React 全栈架构,支持多 Agent、技能市场与多 IM 通道。

program哲学 837

软件可靠性测试与评价

本文系统介绍了软件可靠性工程的核心内容,包括可靠性概念、模型分类、测试方法和评价体系。重点解析了可靠性测试的三大步骤:定义运行剖面、设计测试用例和实施测试收集数据,并以智能安防系统为例说明具体应用。可靠性评价需结合业务场景,通过量化指标(MTBF、失效率等)和模型预测持续优化系统。文章强调可靠性需贯穿软件全生命周期,通过闭环反馈实现持续改进,为关键系统提供质量保障。

moton2017的博客 2050

uni-app 跳转Android原生界面(Activity),并传值交互

应大家的要求,我研究了一下相互传值操作 一、uni-app 跳转Android原生界面(Activity)并传值 前端传值操作 <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> </head> <body> <input type="button" value="js start native Activity" onclick="jsCallNative.

THMAIL的博客 1万+

Camera2Demo

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

Android开发:Activity间数据传递全面指南

在Android应用开发中,组件间通信是实现功能模块解耦的关键技术。Activity作为Android四大组件之一,其数据传递机制基于Binder IPC实现,既保证了进程隔离的安全性,又提供了高效的跨组件通信能力。通过Intent的putExtra方法,开发者可以传递基本数据类型,而Parcelable和Serializable接口则支持复杂对象的序列化传输。合理选择数据传递方案能显著提升应用性能,特别是在表单提交、页面跳转等典型场景中。本文深入解析Intent、Bundle等核心类的使用技巧,并对比Pa

weixin_33857230的博客 384

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Activity 之间传值的几种方式

一、通过startActivity来进行Activity的传值 在Android中,如果我们要通过一个Activity来启动另一个Activity,可以使用 startActivity(Intent intent)方法来传入一个Intent对象,这个Intent对象我们可以精确的指定我们需要跳转的Activity上,或者通过Intent对象来指定我们要完成的一个action操作。

不积跬步,无以至千里;不积小流,无以成江海。 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

android activity之间传递对象,Android Activity之间的数据传递

一、通过startActivity来进行Activity的传值在Android中,如果我们要通过一个Activity来启动另一个Activity,可以使用 startActivity(Intent intent)方法来传入一个Intent对象,这个Intent对象我们可以精确的指定我们需要跳转的Activity上,或者通过Intent对象来指定我们要完成的一个action操作,同时我们可以通过in...

weixin_40003780的博客 1654

Activity之间传递值

一、通过startActivity来进行Activity的传值 在Android中,如果我们要通过一个Activity来启动另一个Activity,可以使用 startActivity(Intent intent)方法来传入一个Intent对象,这个Intent对象我们可以精确的指定我们需要跳转的Activity上,或者通过Intent对象来指定我们要完成的一个action操作,同时我们可以

zhaihoy的博客 244

Android基础知识总结

Android应用基础知识学习总结

风和先行的专栏 1407

Android开发中Intent的核心机制与应用实践

Intent作为Android四大组件间的通信桥梁,是组件化架构的核心机制。其工作原理基于显式与隐式两种调用方式:显式Intent通过类名直接定位组件,适用于应用内部通信;隐式Intent则通过动作(Action)和数据(Data)的声明,由系统动态匹配处理组件,实现跨应用协作。这种设计不仅实现了组件解耦,还支持丰富的功能场景如Activity跳转、Service启动、广播发送等。在工程实践中,Intent需要配合Parcelable对象传递、深度链接(Deep Link)配置等高级技巧,同时需注意数据大小

weixin_34293246的博客 585

Android的startActivityForResult被弃用了,替代方案出炉

1、Activity01 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) var binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.

huangyu12的专栏 6682

startActivityForResult方法过时替代方法

startActivityForResult方法过时替代方法

go12355的专栏 1185

带返回值的Intent startActivityForResult()废弃/过时,替代为registerForActivityResult()简介

startActivityForResult()废弃/过时后,我们可以用registerForActivityResult()替代。

Mr_Leixiansheng的博客 1140
上一篇: Fragment生命周期新认识
下一篇: 使用RecyclerView报错:ClassNotFoundException android.support.v4.util.ArrayMap
AndroidShuai
博客等级 码龄12年 2粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值