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

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,这样才能保证回调成功。

singleInstance和singleTask导致startActivityForResult回调失败的更多相关文章

  1. allow zero datetime=true导致datetime转换失败:MySql.Data.Types.MySqlDateTime”的对象无法转换为类型“System.Nullable`1[System.DateTime]

    allow zero datetime=true导致datetime转换失败:MySql.Data.Types.MySqlDateTime”的对象无法转换为类型“System.Nullable`1[S ...

  2. 解决父类加载iframe,src参数过大导致加载失败

    原文:解决父类加载iframe,src参数过大导致加载失败 <iframe src="*******.do?param=****" id="leftFrame&qu ...

  3. SQLServer 2012异常问题(一)--故障转移群集+镜像环境导致作业执行失败

    原文:SQLServer 2012异常问题(一)--故障转移群集+镜像环境导致作业执行失败 先感谢一下我的同事们最先发现此问题,鸣谢:向飞.志刚.海云 最近在生产环境发现一个诡异的问题: 环境:WIN ...

  4. 【转载】Sqlserver强制密码过期导致数据库登录失败

    Sqlserver在设置登录账户信息的时候,有个复选框信息会被默认勾上,即强制实施密码策略,默认勾选上的还有强制密码过期.如果勾上了这个强制密码过期后,则你的账户密码在一定时间登录后会提示Sqlser ...

  5. service_names配置不正确,导致dg创建失败

    service_names配置不正确,导致dg创建失败 伙伴发来消息,创建dg后,主备一直无法进行日志同步. 以下是查看过程 备库的alert日志: 2018-11-13T17:47:36.23129 ...

  6. 云服务器 linux文件系统异常an error occurren during the file system check导致服务器启动失败

    云服务器 linux文件系统异常an error occurren during the file system check导致服务器启动失败 文件系统宕机,重启后报错,无法启动 处理流程: 1.编辑 ...

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

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

  8. 因为错误关闭Selinux导致CentOS7启动失败(进度条卡死,图形界面加载卡死)

    我在CentOS7上安装oracle,非常麻烦,搞半天终于安装完毕,当天我没有发现任何问题,第二天上班打开虚拟机CentOS7就进不去了. 我想起来之前关闭了Selinux,把系统名称改成了redha ...

  9. 解决nginx启动时域名解析失败而导致服务启动失败的问题

    问题: nginx启动或者reload的时候,会对proxy_pass后面的域名进行DNS解析,如果解析失败,启动就会失败或者reload失败. 我们是to B的产品,客户的环境可能是不通公网的,因此 ...

随机推荐

  1. 德哥PostgreSQL学习资料汇总(转)

    文章来自:https://yq.aliyun.com/articles/59251?spm=5176.100239.bloglist.95.5S5P9S 德哥博客新地址:https://billtia ...

  2. git中多账号切换问题的解决方案(转)

    作者:知乎用户链接:https://www.zhihu.com/question/23028445/answer/416231632来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  3. Git使用(1)

    安装git完成后 1.首先配置你的用户信息,用于体现在你的提交记录中包含your name and your email git config --global user.name "you ...

  4. linux下利用dd命令测试磁盘读写速度

    在Linux中,dd命令用于读取.转换和输出数据,它可从标准输入或文件中读取数据并输出到指定文件或标准输出中.该命令使用参数如下: 其中”=“后面的为设置的参数 If = <文件名>  : ...

  5. Android使用bindService作为中间人对象开启服务

    Android使用bindService作为中间人对象开启服务 项目结构如下: MyService: package com.demo.secondservice; import android.ap ...

  6. windows cmd窗口提示“telnet”命令不能内部或外部命令,也不是可运行的程序

    windows cmd窗口提示“telnet”命令不能内部或外部命令,也不是可运行的程序 原因:C:\Windows\System32目录下没有telnet.exe,path系统变量的值包含了C:\W ...

  7. js实现生成中间带图片的二维码

    之前需要实现生成中间带图片的二维码,所以找了半天终于找到一个可以用的.于是在这里记录一下. 下面是需要注意的几点: 1.使用的js为jquery-qrcode 但是已经经过别人的修改,和网上原来的那些 ...

  8. 如何查找SHELL的进程号并杀死

    一.shell查找进程并杀死 #!/bin/sh tomcat_id=`ps -ef | grep tomcat | grep -v "grep" | awk '{print $2 ...

  9. Go的方法集

    方法集定义了接口的接受规则. package main import "fmt" type notifier interface { notify() } type user st ...

  10. 单例模式——java设计模式

    单例模式 目录: 一.何为单例 二.使用Java EE实现单例模式 三.使用场景 一.何为单例 确保一个类只有一个实例,并且提供了实例的一个全局访问点 1.1 单例模式类图               ...