Android startActivityForResult与singleTask
2016-03-16 11:56
465 查看
今天在修复bug的时候遇到一个奇怪的问题。我一开始使用的是5.0系统测试机,在一个activity跳转到另外一个activity的时候使用了startActivityForResult,结果接与预期一致。但是在5.0一下的系统这个操作就与5.0结果不一致。
通过debug发现,5.0以下在startActivityForResult之后会执行当前Activity的onActivityResult方法,并且resultCode == RESULT_CANCLE,而5.0则会直接跳转到下一个Activity,百思不得其解,后来我看了一下第二个activity的launchModo = singleTask,我先会不会和这个有关系呢,当我改成默认启动模式之后结果就与5.0一致了。
通过上面的操作可以分析这是5.0一下系统实现机制有关系,后来又看了一下源码,在源码中看到了如下注释:
注释中说的很明白了,如果你使用startActivityForResult启动一个singleTask模式的Activity,那么这个Activity不会再当前的栈中运行,并且你会马上接受到一个取消的结果,即RESULT_CANCLE.
上面的问题我将singleTask改成了singleTop,即满足了需求、也不会出现类似上面的问题了。
通过debug发现,5.0以下在startActivityForResult之后会执行当前Activity的onActivityResult方法,并且resultCode == RESULT_CANCLE,而5.0则会直接跳转到下一个Activity,百思不得其解,后来我看了一下第二个activity的launchModo = singleTask,我先会不会和这个有关系呢,当我改成默认启动模式之后结果就与5.0一致了。
通过上面的操作可以分析这是5.0一下系统实现机制有关系,后来又看了一下源码,在源码中看到了如下注释:
/** * For example, if the activity you are launching uses * the singleTask launch mode, it will not run in your * task and thus you will immediately receive a cancel result. * / public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options){ ... }
注释中说的很明白了,如果你使用startActivityForResult启动一个singleTask模式的Activity,那么这个Activity不会再当前的栈中运行,并且你会马上接受到一个取消的结果,即RESULT_CANCLE.
上面的问题我将singleTask改成了singleTop,即满足了需求、也不会出现类似上面的问题了。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories