onActivityResult()与启动模式注意点

323 阅读1分钟

最近在做项目的时候使用到 ActivityResultAPI 来回调当前页结果给上一个页面,发现在 Android4.4 回调不对,Android5.0 以上回调正常。其实这是个老问题了,比较早以前,在使用 onActivityResult() 的时候也有很多人遇到过这个问题了,原因是启动模式的影响,Android4.4 系统和 Android5.0 以上系统对于在 AndroidManifest 登记了 launchMode="singleTask" 的处理方式不一样,所以结果就不一样了。

在这里简单总结下启动模式对 onActivityResult() 的影响,详情可以查看最后的参考文档:

1、如果在 AndroidManifest 给 Activity 设置了启动模式为 singleTask 或者 singleInstance:

  • 在 Android4.4 及以下系统:onActivityResult() 在执行startActivityForResult() 时立即执行,后续就算从目标页面返回也不会再执行了,导致拿不到正常的回调结果。
  • 在 Android5.0 及以上系统,onActivityResult() 正常回调。

2、如果在 startActivityForResult() 给 Intent 设置了 Intent.FLAG_ACTIVITY_NEW_TASK 的话,不管是 Android4.4 还是 Android5.0 等版本,onActivityResult() 在执行 startActivityForResult() 时都会立即执行,导致拿不到正常的回调结果。

参考文档:

Android:onActivityResult()注意点 - 简书 (jianshu.com)

android - onActivityResult With launchMode="singleTask"? - Stack Overflow