最近在做项目的时候使用到 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