美文网首页
Android:onActivityResult()注意点

Android:onActivityResult()注意点

作者: 繁天涯 | 来源:发表于2018-07-08 23:43 被阅读0次

前言:网上说,使用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

相关文章

网友评论

      本文标题:Android:onActivityResult()注意点

      本文链接:https://www.haomeiwen.com/subject/jxbouftx.html