使用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

IBIS模型中的Pullup和Pulldown曲线详解:如何避免信号完整性设计中的常见错误

本文深入解析IBIS模型中Pullup和Pulldown曲线的关键作用,揭示其在信号完整性设计中的黄金法则。通过详细分析曲线特性、常见误区及验证方法,帮助工程师避免设计错误,优化高速PCB设计。文章还展示了曲线数据在动态终端匹配、串扰预测和电源完整性分析中的高级应用,提升设计效率和可靠性。

weixin_30275415的博客 450

DIC新手避坑指南:压缩实验中的应变测量常见错误与数据校验技巧

本文为DIC技术新手提供了压缩实验中应变测量的全面避坑指南。文章系统梳理了从试样尺寸录入、散斑质量到数据后处理中应变方向与符号混淆、数据插值对齐等常见错误,并分享了基于MATLAB的自动化数据校验与可视化对比技巧,帮助建立可靠的实验数据分析SOP,确保DIC测量结果的准确性。

weixin_29313423的博客 113

关于BroadCast,startActivityForResult以及EventBus

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

qq_27840511的博客 560

Hi3516CV610硬件设计避坑指南:从电源模块到DDR布线实战解析

本文深入解析了Hi3516CV610硬件设计中的关键难点与实战技巧。重点剖析了电源架构的选型陷阱与PCB布局要点,详细阐述了DDR3/L高速布线的等长匹配、信号完整性及端接策略,并提供了MIPI接口与时钟电路的隔离设计指南。旨在帮助工程师规避常见设计错误,提升系统稳定性与可靠性。

ooo22的博客 255

EventBus使用简介

EventBus使用简介

asdgbc的专栏 458

【软件逆向】带壳带反调试找flag教程(VMProtect3.0+X64dbg+ScyllaHide)

【软件逆向】带壳带反调试找flag教程(VMProtect 3.0+X64dbg+ScyllaHide)

zhangjiuding的博客 7509

SPEI计算避坑指南:gma中Distribution和FitMethod参数怎么选?

本文深入探讨了在SPEI计算中如何科学选择gma库中的Distribution和FitMethod参数,帮助研究者避开常见陷阱。详细分析了LogLogistic、Gamma和Pearson3三种分布的适用场景,以及LMoment与MLE拟合方法的优缺点,为气象干旱研究提供实用指南。

weixin_30308101的博客 250

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

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

weixin_44371043的博客 567

畅游Diffusion数字人(0):专栏文章导航

畅游Diffusion数字人(0):专栏文章导航

沉迷单车的追风少年 1421

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

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

2401_84563179的博客 821

Android Treble 简介

上面两段话来自官网上,Android 8.0 重新设计了 Android 操作系统框架(在一个名为“Treble”的项目中),以便让制造商能够以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。本文主要整理一下Android Treble框架。

私房菜 9273

全面解析 SAP 事务码 LTMOM 的应用与实践

综上所述,事务码 LTMOM 是 SAP 系统中不可或缺的迁移对象维护工具,它不仅提供了对数据迁移对象的精细配置功能,还通过灵活的数据转换规则与异常监控机制,为企业数据从 SAP ERP 向 SAP S/4HANA 的迁移提供了坚实保障。在数据迁移过程中,并非所有的迁移对象都需要同时启用。业内专家普遍认为,未来的系统升级与数据迁移将更注重业务需求的动态变化与数据实时性的要求,而 LTMOM 作为核心工具,其在流程自动化、数据智能校验以及跨系统数据联动方面的能力,将直接影响企业整体数字化转型的成败。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1005

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万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

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

weixin_33857230的博客 384

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Activity 之间传值的几种方式

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

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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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应用基础知识学习总结

风和先行的专栏 1408

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、付费专栏及课程。

余额充值