Android startActivityForResult与singleTask使用问题
来源:互联网 发布:windows网络指令和用途 编辑:程序博客网 时间:2024/05/21 11:16
我们都知道在activity中有一个方法startActivityForResult,(假设有两个activity A,B)该方法的作用就是在activity A启动一个activity B后,如果该activity B调用finish方法,会触发activity B的onActivityForResult方法,在该方法中我们可以获取activity B需要返回给Activity A的数据,然而当启动的activity A的启动模式为singleTash或者singleInstance时,在调用startActivityForResult方法时会立即回调onActivityForResult方法,并且其中的resultCode为cancel值,这是什么原因呢?我们查看系统源码:
/** * Launch an activity for which you would like a result when it finished. * When this activity exits, your * onActivityResult() method will be called with the given requestCode. * Using a negative requestCode is the same as calling * {@link #startActivity} (the activity is not launched as a sub-activity). * * <p>Note that this method should only be used with Intent protocols * that are defined to return a result. In other protocols (such as * {@link Intent#ACTION_MAIN} or {@link Intent#ACTION_VIEW}), you may * not get the result when you expect. 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. * * <p>As a special case, if you call startActivityForResult() with a requestCode * >= 0 during the initial onCreate(Bundle savedInstanceState)/onResume() of your * activity, then your window will not be displayed until a result is * returned back from the started activity. This is to avoid visible * flickering when redirecting to another activity. * * <p>This method throws {@link android.content.ActivityNotFoundException} * if there was no Activity found to run the given Intent. * * @param intent The intent to start. * @param requestCode If >= 0, this code will be returned in * onActivityResult() when the activity exits. * * @throws android.content.ActivityNotFoundException * * @see #startActivity */public void startActivityForResult(Intent intent, int requestCode)上面注释已经写的很清楚了,当启动的activity B是singleTask时, activity A和activity B两个activity不在同一个任务栈中(这个地方有歧义,实际上以singleTask启动模式启动一个activity并不一定会重新开启一个任务栈,只有当系统中不存在与该activity的TaskAffinity相同的任务栈时,系统才会创建一个新的任务栈),所以activity A将会立即得到一个cancel的结果。
所以为了满足任务栈中只存在一个activity B,同时又能够正常使用activity的startActivityForResult,我们可以将activity的启动模式设置为standard同时将intent添加一个flag:Intent.FLAG_CTIVITY_CLEAR_TOP.
0 0
- Android startActivityForResult与singleTask使用问题
- Android startActivityForResult与singleTask
- SingleTask 与 startActivityForResult冲突问题
- Android singleTask或singleInstance与startActivityForResult冲突
- startactivityforresult的使用,和singleTask不能使用的问题
- Android的SingleTask,SingleInstance和StartActivityForResult冲突问题
- Android singleTask或singleInstance与startActivityForResult冲突解决
- Android singleTask或singleInstance与startActivityForResult冲突解决
- Android singleTask或singleInstance与startActivityForResult冲突解决
- Android singleTask、startActivityForResult 冲突解决
- StartActivityForResult和“SingleTask”属性的问题
- StartActivityForResult与启动模式singleTask,singleInstance研究
- android中Activity的启动模式是singleTask或singleInstance与startActivityForResult,onActivityResult
- StartActivityForResult与启动模式singleTask,singleInstance研究 (转)
- StartActivityForResult与SingleTask启动模式之间的关系
- Android非5.0系统下singleTask singleInstance startActivityForResult
- Android Activity startActivityForResult 问题
- Android:startActivityForResult 与 onActivityResult
- openqnx
- 文件上传漏洞原理与实例测试
- hdu A计划 (BFS)
- Changed limits: max_open_files: 1024
- redisson的理解和使用-调用流程
- Android startActivityForResult与singleTask使用问题
- RSA密钥生成、加密解密、签名验签
- 代码安全增强与标准注解语言SAL
- [Recovery]如何编译差分升级包
- 史上最详细测试用例设计实践-1:用例划分与设计
- 打包mysql、tomcat、jdk为一个软件
- HDU 5727 Necklace 2016多校第二场
- nginx配置参考2
- 关于flowPlay播放器