onActivityResult的各种"坑"

本文探讨了使用startActivityForResult()和onActivityResult()进行Activity间数据传递时遇到的问题,包括启动模式对回调的影响及请求码的有效性,提供了有效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近写了一个东西,其中需要用到Activity的回传值的问题,当时没有用消息总线,也就是EventBus,只是用了startActivityForResult() 和 onActivityResult() 方法来传递或接收参数,谁知道遇到了各种坑,下面给大家分享一下。

一、执行了startActivityForResult()方法之后,第二个Activity还没有做任何操作,onActivityResult() 就被执行了,我X,这是什么情况?各种百度,各种Google,最后得出的结论是:这与Activity的启动模式有关,所有需要传递或接收的 Activity 不允许设置singleInstance或singleTask的启动模式,只能设为标准模式,否则系统将在 startActivityForResult() 后直接调用 onActivityResult()。

二、onActivityResult始终不被执行,这又是什么情况,Debug确定这个方法确实没执行。造成的原因:startActivityForResult(intent, -1);是第二个参数的问题,该参数必须>=0才能在返回值,只要随便修改为一个>=0的整数,方法就能被执行。

这几个错误说起来不大,但是一旦遇到就非常浪费时间,错误报的不明显,可以说是根本看不懂。我希望大家以后遇到这种坑能绕过,别再这种事上浪费时间,除非你对AndroidAPI很熟悉。不然我提倡大家在数据传递的时候尽量用解耦框架来完成,比如消息总线,这样遇到的问题会少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Anonymous-OS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值