startActivityForResult()实现的机制

本文详细解析了Android中startActivityForResult方法的工作原理,包括其异步特性、如何正确处理回调结果及注意事项。通过阅读本文,开发者可以更好地理解此方法在何时何地使用最为合适。

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

1、这个问题问度娘没有找到答案,结果还是问的谷哥。

一开始以为是新开了一个thread,然后查了一下,发现只是在UIThread里面,startActivityForResult() is asynchronous. That does not mean that your new activity will be executed in a different thread. If the new activity is part of your own application, it runs on the main application thread, like all your other activities.
参见StackFlow:
http://stackoverflow.com/questions/3489164/what-is-the-mechanism-behind-startactivityforresult-in-android

同时,使用startActivityForResult()方法开启一个新的Activity,该sub-Activity不论以何种方式结束,都需要传一个值给前一个Aciivty,或者需要在onActivityResult(int requestCode, int resultCode, Intent data)方法里面,对data进行判空。

2、借用Developer文档中的说明也许更加明确。

startActivityForResult()使用的场景就是当你希望新启动的Activity结束之后能够有一个result返回给当前Activity时使用。在当前Activity中应该写 onActivityResult()方法获取数据。

参数:


intent The intent to start.
requestCode If >= 0, this code will be returned in onActivityResult() when the activity exits.
options Additional options for how the Activity should be started. See Context.startActivity(Intent, Bundle) for more details.

public void startActivityForResult (Intent intent, int requestCode, Bundle options) 一般来说,requestCode会 final int定义,如果它为负数,与普通的startActivity没有不同

(这段没怎么懂,求解释)文档中提出,使用该方法的前提是你使用的intent协议明确有返回结果,在其他的协定中,比如ACTION_VIEW和ACTION_MAIN中国,将得不到你想要的结果。比如,如果你的Activity模式是singleTask启动模式,此时将得不到想要的结果。

如果没有找到相应的Activity,会报错: ActivityNotFoundException


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值