Android:onActivityResult()注意点

前言:网上说,使用startActivityForResult()进行数值回传时,onActivityResult()执行顺序在不同启动模式下有所差别。本人就对此进行了验证。
一.页面跳转使用的跳转方法
众所周知,Activity的跳转可以分为两类,分别是使用 startActivity()和startActivityForResult(),前者通常用于页面间正常的跳转,后者一般用于页面间传值(通过Intent)。onActivityResult()是在使用了startActivityForResult()才会调用。
二.onActivityResult()方法的使用(这里用MainActivity跳转到SecondActivity,demo是点击按钮btn跳转)

MainActivity跳转的代码.png
MainActivity回传数值调用的代码.png
SecondActivity.png

三.结果(以下说的launchMode是指SecondActivity清单文件的配置)
1.在android5.0及以上系统,onActivityResult()都是在SecondActivity按返回键或调用finish()以后才执行,下图是相关生命周期执行情况(四种launchMode都是这样的顺序);


图1:MainActivity跳转到SecondActivity然后按返回键.png

2.但是,在5.0以下系统,
当launchMode设置为standard(默认的)和singletop模式时,同样操作执行的顺序跟图1相同。
当launchMode设置为singletask和singleinstance模式时,其执行顺序会跟图1不同(如下图2)。

MainActivity跳转到SecondActivity然后按返回键.png

四.总结
1.两个页面跳转数值回传时(即使用startActivityForResult())时,除特殊情况下,5.0以下系统目标Avcivity的启动模式(launchMode)影响onActivityResult()的执行顺序,源Avcivity无影响(本案例中SecondActivity是目标Avcivity,MainActivity是源Avcivity)。
2.在android5.0及以上系统时,onActivityResult()不受清单文件中启动模式影响,都是在SecondActivity按返回键或finish()以后执行。(如图1,有特殊情况,稍后补充)
3.在android5.0以下系统时,如果启动模式是standard(默认的)和singletop,onActivityResult()是在SecondActivity按返回键或finish()以后执行(如图1)。当启动模式是singletask和singleinstance时,onActivityResult()是在执行startActivityForResult()时立即执行(如图2)。
4.特殊情况:在android5.0及以上系统,当设置MainActivity中跳转使用的intent的flag为FLAG_ACTIVITY_NEW_TASK时,生命周期执行情况如图2.


MainActivity设置flags跳转的代码.png

五.原因
原因参考:https://stackoverflow.com/questions/8960072/onactivityresult-with-launchmode-singletask

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、概述 Activity 作为与用户交互的一个窗口,是使用非常频繁的一个基本组件。Android系统是通过Act...
    三也视界阅读 2,430评论 3 11
  • Android 的活动是可以包含用户界面的组件,主要用于与用户进行交互。 1 手动创建活动 手动创建活动可以加深对...
    deniro阅读 3,815评论 0 10
  • 【Android Activity】 什么是 Activity? 四大组件之一,通常一个用户交互界面对应一个 ac...
    Rtia阅读 3,951评论 3 18
  • 小吴和周周是高三同学且同桌。他们经常一块吃饭或课余做一些其它的活动。有一次,小吴病了,身体乏力并伴有高烧,当快要去...
    顺水河畔阅读 332评论 0 0
  • 1.村小学的水泥地 我最早接触篮球是在小学的时候。准确的说,是在一节体育课上。 我上的小学在邻村,走路十分钟就到了...
    Ladpger阅读 624评论 0 1

友情链接更多精彩内容