singleInstance和singleTask导致startActivityForResult回调失败
先来了解下这两种启动模式:
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回调失败相关推荐
- 完美解决三星手机拍照后横竖屏切换导致的回调为null以致程序崩溃的问题(包括三星note3的特殊适配)
场景:安卓开发中我们经常会有拍照上传的需求,比如上传图片,或者上传头像等等,方法也比较常规,通过调用startActivityForResult(Intent intent, int requestC ...
- mysql数据库建表失败_mysql数据库文件太大导致建表失败,如何避免
[求助]mysql数据库文件太大导致建表失败,如何处理? 目录下各文件大小如下: root /mbsc/mysql/data # ll total 120646812 -rw-rw---- 1 mys ...
- SAP LSMW 因物料描述里有换行符或者引号导致数据导入失败
SAP LSMW 因物料描述里有换行符或者引号导致数据导入失败 近期,笔者所在的D项目进入第一轮主数据导入的阶段.导入物料主数据由笔者负责. 我的LSMW工具如下方式: 采用的是standard ba ...
- 【Android 逆向】函数拦截 ( CPU 高速缓存机制 | CPU 高速缓存机制 导致 函数拦截失败 )
文章目录 一.CPU 高速缓存机制 二.CPU 高速缓存机制 导致 函数拦截失败 一.CPU 高速缓存机制 CPU 架构模型中 , 指令 在开始时 , 存放在内存中 , 如 : /proc/pid/m ...
- 安装中文语言包会导致 Troubleshoot Compatibility 失败
Windows 7 Beta1 发布同时,还向大家提供了中文语言支持包.这样一来满足了那些英文水平不好或不喜欢使用英文界面的测试者,带来了很大的方便.gOxiA 英文水平也很差所以在第一时间装上了语言 ...
- linux id高 负载高,linux下的rsync连接数突然增高,负载增高导致服务登录失败
问题:测试centos5.3系统下的rsync连接数.linux下的rsync连接数突然增高,负载增高导致服务登录失败. 软硬件环境如下: 四台2个四核的CPU,8G内存的刀片服务器,只提供rsync ...
- mysql max_allowed_packet 设置过小导致记录写入失败
mysql max_allowed_packet 设置过小导致记录写入失败 mysql根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会受max_allowed_packet 参 ...
- mysql装完后navicat无法连接_重装mysql后导致Navicat连接失败
今天重装了mysql数据库,然后再使用navicat去连接数据库的时候,一直报错 1251 Client does not support authentication protocol reques ...
- 所生成项目的处理器架构“MSIL”与引用“***”的处理器架构“x86”不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器......
警告:所生成项目的处理器架构"MSIL"与引用"***"的处理器架构"x86"不匹配.这种不匹配可能会导致运行时失败.请考虑通过配置管理器更 ...
最新文章
- a-awk外部变量传入,内部变量传出,同时过滤空格及其他字符
- 10 年 IT 老兵给新人程序员的几点建议
- android studio gradle配置_Unity打包Android最全攻略(含完整流程及常见问题)
- 第六章插图以及代码文件和插图之间的对应关系
- java io操作_Java 的IO操作(文件的读,写操作)
- 赠书 | 什么是 Knative?
- Nginx 中 nginx.conf 详解
- 初识ObjectBox--Android平台
- 基于SharePoint 2010的控制台应用程序常见问题
- One Web MKey
- IE7、IE8、IE9、IE10后各版本的更新及差别
- 【所见即所得】数据分析最有用的25个 Matplotlib图【附代码】
- myeclipse cracker
- Flutter Dio网络请求:DioError [DioErrorType.RESPONSE]: Http status error [400]或者[500]
- Ext js 下拉框模糊匹配查询,并支持反复输入检索
- linux VFS概述以及内核源代码分析
- 三大统计软件:SAS、Stata与SPSS比较
- 罗振宇2021《时间的朋友》体会
- 【MATLAB】求算凸轮摆杆机构的最大压力角和最小半径并画出凸轮轮廓
- 1998-2015经典卷积神经网络简介
热门文章
- linux无法运行病毒,{转}为什么linux系统不容易中病毒?
- java concurrency_Java Concurrency - Lock
- Spring 5.0 源码编译, 403, 404 依赖pom 无法下载问题
- 四川网络推广浅析网站标题到底能不能修改,什么时候能修改?
- 网络营销中SEO是最常用的“圈粉”引流方式之一
- linux shell概述,Linux学习 -- Shell基础 -- 概述
- mysql 数据库 限制大小_MySQL数据库表各种大小限制小结
- 宏基微型计算机c650使用方法,c650卧式车床的控制系统的pc控制改造毕业设计正文.doc...
- 开发日记-20190521 关键词 bash的几个初始化文件
- elasticsearch 索引搜索和索引性能优化配置——思路:去掉不必要的数据,减小数据的磁盘空间占用,同时提升性能...