先来了解下这两种启动模式:

1.singleInstance,全局唯一,它的实例在全局(即在众多任务栈中)是唯一的,它单独地存在于属于自己的任务栈中,而且这个任务栈没有其他实例。

2.singleTask,任务栈中唯一,它的实例在任务栈中是唯一的。它在被Intent的时候,会先在系统中查找属性值affinty与它的属性值taskAffinity相同的任务栈是否存在,如果存在,则在这个任务启动,如果不在,则在新任务栈中启动。如果想要这种启动模式的activity在新的任务栈中启动,就要为它设置单独的taskAffinity。请记住,如果设置了单独的taskAffinity,那么这种启动模式的activity就会跟启动它的activity不在同一个任务栈中。

为什么singleInstance会导致回调失败呢?我们来模拟一下:

A是默认启动模式,B是singleInstance,在A中startActivityForResult() B

查看log日志:

在A中startActivityForResult()后,A马上失去焦点,接着立即回调了onActivityResult(),resultCode=0也就是结果码是RESULT_CANCELED。因为立即回调了onActivityResult(),所以A重新获得焦点onResume然后失去焦点,最后B起来。

同样,A是singleInstance,B是默认启动模式,或者A和B都是singleInstance,都是在A中startActivityForResult() B,得到的结果跟上述一样。

为什么目标的是singleTask会导致回调失败呢?

A是默认启动模式,B是singleTask(没有单独的taskAffinity),在A中startActivityForResult() B

查看log日志:

得到的结果跟使用了singleInstance是一样的。

如果A是默认启动模式,B是singleTask(设置单独的taskAffinity),得到的结果也是跟上述一样。

根据结果,分析如下:

1.因为当使用了singleInstance,两者就不在同一个任务栈中,所以startActivityForResult回调失败。

2.我觉得,因为当使用了singleTask以后,接intent的Activity就有可能跟发intent的不在同一个任务栈中(设置了单独的taskAffinity),所以startActivityForResult回调失败。

结论是:如果发现两者有可能不在同一个任务栈中,startActivityForResult回调失败。。。。那么在使用startActivityForResult时,发Intent和接Intent的activity最好都是默认启动模式,否则要保证发Intent的不是singleInstance以及接Intent的不是singleInstance或singleTask,这样才能保证回调成功。

转载于:https://www.cnblogs.com/zhujiabin/p/10224245.html

singleInstance和singleTask导致startActivityForResult回调失败相关推荐

  1. 完美解决三星手机拍照后横竖屏切换导致的回调为null以致程序崩溃的问题(包括三星note3的特殊适配)

    场景:安卓开发中我们经常会有拍照上传的需求,比如上传图片,或者上传头像等等,方法也比较常规,通过调用startActivityForResult(Intent intent, int requestC ...

  2. mysql数据库建表失败_mysql数据库文件太大导致建表失败,如何避免

    [求助]mysql数据库文件太大导致建表失败,如何处理? 目录下各文件大小如下: root /mbsc/mysql/data # ll total 120646812 -rw-rw---- 1 mys ...

  3. SAP LSMW 因物料描述里有换行符或者引号导致数据导入失败

    SAP LSMW 因物料描述里有换行符或者引号导致数据导入失败 近期,笔者所在的D项目进入第一轮主数据导入的阶段.导入物料主数据由笔者负责. 我的LSMW工具如下方式: 采用的是standard ba ...

  4. 【Android 逆向】函数拦截 ( CPU 高速缓存机制 | CPU 高速缓存机制 导致 函数拦截失败 )

    文章目录 一.CPU 高速缓存机制 二.CPU 高速缓存机制 导致 函数拦截失败 一.CPU 高速缓存机制 CPU 架构模型中 , 指令 在开始时 , 存放在内存中 , 如 : /proc/pid/m ...

  5. 安装中文语言包会导致 Troubleshoot Compatibility 失败

    Windows 7 Beta1 发布同时,还向大家提供了中文语言支持包.这样一来满足了那些英文水平不好或不喜欢使用英文界面的测试者,带来了很大的方便.gOxiA 英文水平也很差所以在第一时间装上了语言 ...

  6. linux id高 负载高,linux下的rsync连接数突然增高,负载增高导致服务登录失败

    问题:测试centos5.3系统下的rsync连接数.linux下的rsync连接数突然增高,负载增高导致服务登录失败. 软硬件环境如下: 四台2个四核的CPU,8G内存的刀片服务器,只提供rsync ...

  7. mysql max_allowed_packet 设置过小导致记录写入失败

    mysql max_allowed_packet 设置过小导致记录写入失败 mysql根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会受max_allowed_packet 参 ...

  8. mysql装完后navicat无法连接_重装mysql后导致Navicat连接失败

    今天重装了mysql数据库,然后再使用navicat去连接数据库的时候,一直报错 1251 Client does not support authentication protocol reques ...

  9. 所生成项目的处理器架构“MSIL”与引用“***”的处理器架构“x86”不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器......

    警告:所生成项目的处理器架构"MSIL"与引用"***"的处理器架构"x86"不匹配.这种不匹配可能会导致运行时失败.请考虑通过配置管理器更 ...

最新文章

  1. a-awk外部变量传入,内部变量传出,同时过滤空格及其他字符
  2. 10 年 IT 老兵给新人程序员的几点建议
  3. android studio gradle配置_Unity打包Android最全攻略(含完整流程及常见问题)
  4. 第六章插图以及代码文件和插图之间的对应关系
  5. java io操作_Java 的IO操作(文件的读,写操作)
  6. 赠书 | 什么是 Knative?
  7. Nginx 中 nginx.conf 详解
  8. 初识ObjectBox--Android平台
  9. 基于SharePoint 2010的控制台应用程序常见问题
  10. One Web MKey
  11. IE7、IE8、IE9、IE10后各版本的更新及差别
  12. 【所见即所得】数据分析最有用的25个 Matplotlib图【附代码】
  13. myeclipse cracker
  14. Flutter Dio网络请求:DioError [DioErrorType.RESPONSE]: Http status error [400]或者[500]
  15. Ext js 下拉框模糊匹配查询,并支持反复输入检索
  16. linux VFS概述以及内核源代码分析
  17. 三大统计软件:SAS、Stata与SPSS比较
  18. 罗振宇2021《时间的朋友》体会
  19. 【MATLAB】求算凸轮摆杆机构的最大压力角和最小半径并画出凸轮轮廓
  20. 1998-2015经典卷积神经网络简介

热门文章

  1. linux无法运行病毒,{转}为什么linux系统不容易中病毒?
  2. java concurrency_Java Concurrency - Lock
  3. Spring 5.0 源码编译, 403, 404 依赖pom 无法下载问题
  4. 四川网络推广浅析网站标题到底能不能修改,什么时候能修改?
  5. 网络营销中SEO是最常用的“圈粉”引流方式之一
  6. linux shell概述,Linux学习 -- Shell基础 -- 概述
  7. mysql 数据库 限制大小_MySQL数据库表各种大小限制小结
  8. 宏基微型计算机c650使用方法,c650卧式车床的控制系统的pc控制改造毕业设计正文.doc...
  9. 开发日记-20190521 关键词 bash的几个初始化文件
  10. elasticsearch 索引搜索和索引性能优化配置——思路:去掉不必要的数据,减小数据的磁盘空间占用,同时提升性能...