Android setResult()的调用时机
来源:互联网 发布:select sql语句是 编辑:程序博客网 时间:2024/05/18 09:06
今天遇到这样一个问题,我在Activity-A中用startActivityForResult()方法启动了Activity-B,并且在B中通过setResult()方法给A返回值,由于某些原因不能在setResult()之后立刻调用finish()函数,只能通过用户按Back键自己退出到A。按理说从B退出回到Aactivity-A过程中,A中的 onActivityResult() 应该被调用, 可是通过log发现,整个操作过程中 onActivityResult() 始终没有被调用。 前后研究了半天才发现 是 setResult() 的调用时机不对造成的,因为在我是在B的onStop() 函数中调用setResult()函数的,这个时候的seResult是没有任何意义的,因为已经错过了A onActivityResult() 的调用时机。
因为在 B 退回 A过程中,执行过程是
B---onPause
A---onActivityResult
A---onRestart
A---onStart
A---onResume
B---onStop
B---onDestroy
从上面过程可以看出,首先是B处于Pause 状态,然后等待A执行 onRestart——> onStart ——〉onResume,然后才是B 的onSstop——>onSdestroy,而A的 onActivityResult() 需要在B的onPause之后,A的onRestart之前这中间调用,所以B中的setResult()函数应该放在B的onPause之前调用。
另外我试验了一下,如果把setResult()放在 B 的 onPause() 里面调用,结果仍然是无效的。
那么setResult()应该在什么时候调用呢?从源码可以看出,Activity返回result是在被finish的时候,也就是说调用setResult()方法必须在finish()之前。所以在onPause、onStop、onDestroy方法中调用setResult()也有可能不会返回成功,因为这些方法调用不一定是在finish之前的,当然在onCreate()就调用setResult肯定是在finish之前的,但是又不满足业务需要。
实际使用场景有两个:
(1)按BACK键从一个Activity退出来的,一按BACK,android就会自动调用Activity的finish()方法,
方法:重写onBackPressed()方法,捕获BACK事件,捕获到之后先setResult。代码:
(2)按点击事件中显式的调用finish()
执行过程为:
B---onBackPressed
B---finish
B---onPause
A---onActivityResult
A---onRestart
A---onStart
A---onResume
B---onStop
B---onDestroy
转自:http://www.cnblogs.com/shaweng/p/3875825.html
- Android setResult()的调用时机
- setResult()的调用时机
- setResult()的调用时机
- android中setResult的调用时机
- Android Activity 中 onActivityResult() 与 setResult()的调用时机
- Android Activity 中 onActivityResult() 与 setResult()的调用时机
- Android Activity 中 onActivityResult() 与 setResult()的调用时机
- Android Activity 中 onActivityResult() 与 setResult()的调用时机
- Android应用开发—setResult()的调用时机
- android基础——setResult()调用时机
- onActivityResult()和setResult()的调用时机
- Android初学习 - Activity 中 onActivityResult() 与 setResult()的调用时机
- Android activity的setResult()在什么时候调用?
- Android:onNewIntent的调用时机
- android onNewIntent的调用时机
- android BaseAdapter的getView的调用时机
- android BaseAdapter的getView的调用时机
- Android Service的onRebind方法调用时机
- Class-Specific Hough Forests for Object Detection
- Maven 配置tomcat和findbug插件(在eclipse建立的项目中)
- iOS开发之UIButton(自用贴)
- Sublime Text快捷键
- 更换ruby源----RubyGems 镜像 - 淘宝网
- Android setResult()的调用时机
- iOS推送&PHP后台
- Serializable
- 【原创】揭秘_APIX_的高性能网关架构
- 如何在action中设定session值后在jsp取值
- Android输入系统(三):加载按键映射
- linux 技巧:使用 screen 管理你的远程会话
- 异步下载
- DB2数据库IMPORT/EXPORT脚本生成