您的位置:首页 > 其它

startActivityForResult()实现的机制

2015-11-16 15:48 477 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: