startActivityForResult 与launchmode有关
来源:互联网 发布:淘宝云客服质检扣分 编辑:程序博客网 时间:2024/04/25 09:31
可以经由过程应用 startActivityForResult() 和 onActivityResult() 办法来传递或接管参数。
然而在“轻听”项目中,还没比及被调用的 Activity 返回,onActivityResult() 就被履行了。
找了好久,终于经由过程小道消息得知,这与 Activity 的加载模式(launchMode)有关,该属性可以在 AndroidManifest.xml 中设置。
本来将其设为 singleInstance,经测试,所有须要传递或接管的 Activity 不容许设置该属性,或只能设为标准模式,不然体系将在 startActivityForResult() 后直接调用 onActivityResult()。
调用startActivityForResult后,onActivityResult无响应的题目
两个activity传递数据和返回数据时,恳求方的onActivityResult始终无响应,经由过程debug调试模式也没见调用该办法。查看了各类设备和法度代码,均未发明有错误之处。后面找了很多材料,总算看到一个伴侣说是调用startActivityForResult的参数题目,即调用时如许:
startActivityForResult(intent, 0);
是第二个参数的题目,该参数必须大于0才干在返回值,并激活onActivityResult办法。
我最开端是用的一个activity默认的常量:RESULT_OK,跟踪了代码后发明,该常量的值为-1,当然没法激活 onActivityResult办法了,随后随便批改为一个大于0的整数,法度即通跑成功。
startActivityForResult(intent, 1); //如许就行了
1.startActivityForResult(Intent intent, Int requestCode);
2.setResut(int resultCode, Intent intent);
3.onActivityResult(int requestCode, int resultCode, Intent intent);
重视事项:
1.比来应用startActivityForResult,失足,跟踪后发明activity并没有被启动,而是直接履行 onActivityResult。后查看日记发明
“05-19 02:11:19.822: WARN/ActivityManager(67): Activity is launching as a new task, so cancelling activity result.”
本来是我把要启动的activity的launchmode设置成singleTask了。
把目标activity的launchmode去掉,正确。
总结:目标activity的launchmode不克不及设置成singleTask。
2.requestCode值>=0,不然,startActivityForResult就变成了 startactivity
从SDK我们可以看到如下深奥的解释:http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
The other modes — singleTask and singleInstance — are not appropriate for most applications, since they result in an interaction model that is likely to be unfamiliar to users and is very different from most other applications.
从柯元旦的《Android 内核剖析》的第十章“Ams内部原理“10.1.3中有这样的一段话:请注意:SINGLE_TASK标识以及SINGLE_INSTANCE两个标识必须在r.result==0的条件中,即这两个标识只能用在startActivity()的方法中,而不能使用在startActivityForResult方法中。因为从Task的角度看,Android认为不同Task之间的Activity是不能传递数据的,所以不能使用NEW_TASK标识,但还是要调用forResult方法。
然而在“轻听”项目中,还没比及被调用的 Activity 返回,onActivityResult() 就被履行了。
找了好久,终于经由过程小道消息得知,这与 Activity 的加载模式(launchMode)有关,该属性可以在 AndroidManifest.xml 中设置。
本来将其设为 singleInstance,经测试,所有须要传递或接管的 Activity 不容许设置该属性,或只能设为标准模式,不然体系将在 startActivityForResult() 后直接调用 onActivityResult()。
调用startActivityForResult后,onActivityResult无响应的题目
两个activity传递数据和返回数据时,恳求方的onActivityResult始终无响应,经由过程debug调试模式也没见调用该办法。查看了各类设备和法度代码,均未发明有错误之处。后面找了很多材料,总算看到一个伴侣说是调用startActivityForResult的参数题目,即调用时如许:
startActivityForResult(intent, 0);
是第二个参数的题目,该参数必须大于0才干在返回值,并激活onActivityResult办法。
我最开端是用的一个activity默认的常量:RESULT_OK,跟踪了代码后发明,该常量的值为-1,当然没法激活 onActivityResult办法了,随后随便批改为一个大于0的整数,法度即通跑成功。
startActivityForResult(intent, 1); //如许就行了
1.startActivityForResult(Intent intent, Int requestCode);
2.setResut(int resultCode, Intent intent);
3.onActivityResult(int requestCode, int resultCode, Intent intent);
重视事项:
1.比来应用startActivityForResult,失足,跟踪后发明activity并没有被启动,而是直接履行 onActivityResult。后查看日记发明
“05-19 02:11:19.822: WARN/ActivityManager(67): Activity is launching as a new task, so cancelling activity result.”
本来是我把要启动的activity的launchmode设置成singleTask了。
把目标activity的launchmode去掉,正确。
总结:目标activity的launchmode不克不及设置成singleTask。
2.requestCode值>=0,不然,startActivityForResult就变成了 startactivity
从SDK我们可以看到如下深奥的解释:http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
The other modes — singleTask and singleInstance — are not appropriate for most applications, since they result in an interaction model that is likely to be unfamiliar to users and is very different from most other applications.
从柯元旦的《Android 内核剖析》的第十章“Ams内部原理“10.1.3中有这样的一段话:请注意:SINGLE_TASK标识以及SINGLE_INSTANCE两个标识必须在r.result==0的条件中,即这两个标识只能用在startActivity()的方法中,而不能使用在startActivityForResult方法中。因为从Task的角度看,Android认为不同Task之间的Activity是不能传递数据的,所以不能使用NEW_TASK标识,但还是要调用forResult方法。
- startActivityForResult 与launchmode有关
- 注意坑 LaunchMode与StartActivityForResult
- android Activity android:launchMode="singleInstance" 与 startActivityForResult
- startActivityForResult的launchmode
- Android LaunchMode and StartActivityForResult
- startActivityForResult和launchMode的兼容性
- LaunchMode 导致StartActivityForResult无效的原因
- Fragment startActivityForResult与getActivity().startActivityForResult
- startActivityForResult与setResult
- startActivityForResult与onActivityResult
- startActivityForResult与onActivityResult
- startActivityForResult与onActivityResult
- startActivityForResult与onActivityResult
- startActivityForResult与onActivityResult
- startActivityForResult与onActivityResult 函数
- startActivityForResult与onActivityResult
- startActivityForResult与onActivityResult
- startActivityForResult与onActivityResult
- JVM内存模型及垃圾收集策略解析
- 阻塞I/O(等待队列)
- 美好的时间总是太短暂
- 1145[校门外的树]
- CSS3 用户界面
- startActivityForResult 与launchmode有关
- python系列学习三 —— 数据处理
- Linux环境下安装LicenseManager
- Java基础之内存回收机制
- 数据结构_树结构
- 开源免费的C/C++网络库(c/c++ sockets library) 七剑下天山
- 广电网络使用VisualNet动态显示信息变化
- 配置 yum 源的两种方法
- linux wget的使用