Android使用 startActivityForResult 、 onActivityResult 时的注意事项

今天使用 startActivityForResult 时遇到两个问题,应该是常见问题了吧,浪费了些时间才搞定,做个记录。

1. onActivityResult 的触发顺序问题

这个问题很郁闷,我一开始的设计是 

MainActivity -> LoginActivity -> onActivityResult  (通知已登录成功相关 UI 更新)

结果却是刚进入 LoginActivity 时就触发了 onActivityResult  事件,导致 resultCode 始终为 0 ,为这个问题郁闷了半天

MainActivity.java

            Intent intent = new Intent(this, LoginActivity.class);
            startActivityForResult(intent, LOGIN_REQUEST);

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        ZLog.i(TAG, "onActivityResult: requestCode="+ requestCode +", resultCode="+ resultCode);
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == LOGIN_REQUEST) {
            ZLog.i(TAG, "requestCode");
            if (resultCode == LOGIN_RESULT) {
                ZLog.i(TAG, "resultCode");
                this.onCreateOptionsMenu(this.mMenu);
            }
        }
    }

LoginActivity.java

                setResult(MainActivity.LOGIN_RESULT);
                finish();

后来谷歌一番之后,找到了问题所在,是 onActivityResult 和 AndroidManifest.xml 中 activity 的 launchMode 配置有冲突造成的。

解决办法:

需要返回 result 的 activity 不能使用:

android:launchMode="singleTask"
android:launchMode="singleInstance"

甚至有人说 singleTop 也会冲突,那就只好用默认的 standard 了,至于原理我没空深入去研究了。

经试验,设置为默认的 standard 后确实就正常了,暂时就这样解决吧。

2. 执行 finish() 后出现错误提示 Activity has leaked window com.android.internal.policy.impl.PhoneWindow

这是因为在执行 finish 释放一个 activity 时,还有一些依赖于该 activity 的控件没有关闭造成的,我这里是因为 dialog 只是执行了一下 hide() 方法,使用 dismiss() 一下就ok了

时间: 2024-10-22 06:44:25

Android使用 startActivityForResult 、 onActivityResult 时的注意事项的相关文章

arcgis-Arcgis For Android读取shpfile文件时,中文乱码问题

问题描述 Arcgis For Android读取shpfile文件时,中文乱码问题 加载shpfile文件,读取shpfile文件数据时,中文会出现乱码,如何解决? 解决方案 中文有一些问题的,不要用中文,用英文吧 解决方案二: 试试这个博客里讲的方法:http://blog.163.com/gis_wangwei/blog/static/2390410022015113134247554

android真机调试时无法显示logcat信息的解决方法介绍

以下是对android真机调试时无法显示logcat信息的解决方法进行了详细的分析介绍,需要的朋友可以过来参考下   android真机调试时无法显示logcat信息的解决方法介绍: window-->show view-->android->devices, 打开devices,点击右边的截屏图片的按钮.等到出现截图的时候,logcat就出来信息了!

android studio运行项目时出现这个异常怎么解决??

问题描述 android studio运行项目时出现这个异常怎么解决?? 解决方案 android studio检查严格了,你的有张图片后缀名是png的但是你图片格式不是png的,你把它找出来改后缀名就行了,看他格式可以在as里打开图片,右上角会显示图片的真实格式,与后缀名不符的都改了 解决方案二: 问题:在运行android的项目时出现的异常 The connection to adb is down, and a severe error has occured. [2010-03-11 0

logcat- 当运行Android的JUnit测试时,LogCat's Log.x() 在哪里输出?

问题描述 当运行Android的JUnit测试时,LogCat's Log.x() 在哪里输出? 当我通过测试TestCase和AndroidTestCase中的派生类来测试普通的java类时,LogCat输出消失. 那它是否仍然可以捕获这些输出信息?或者说我只能使用更缓慢的ActivityInstrumentationTestCase2 < >作为基类? 解决方案 我在 Android 2.1中也遇见相似的问题.Eclipse中可查看logcat,但在Android Junit模式中运行程序

nfc技术-Android开发NFC功能时遇到的问题Ndef.get(tag)返回null

问题描述 Android开发NFC功能时遇到的问题Ndef.get(tag)返回null 照着网上资料写的,但就是不成功,经过多次调试最终发现问题位置: Ndef ndef = Ndef.get(tag); 这句返回的总是null,但是tag是有值的,TAG: Tech [android.nfc.tech.MifareClassic, android.nfc.tech.NfcA, android.nfc.tech.NdefFormatable] 同样的,NdefFormatable format

Javascript中使用exec进行正则表达式全局匹配时的注意事项_正则表达式

本文就是介绍在使用 Javascript 中使用 exec 进行正则表达式全局匹配时的注意事项. 先看一下常见的用法: 复制代码 代码如下: <script type="text/javascript"> var pattern = /http:\/\/([^\/\s]+)/; alert(pattern.exec('http://www.codebit.cn')); // http://www.codebit.cn,www.codebit.cn alert(pattern

ThinkPHP后台首页index使用frameset时的注意事项分析_php实例

html的frameset标签在多窗口程序设计中有着广泛的应用,尤其是在项目后台页面部分.本文就来分析ThinkPHP后台首页index使用frameset时的注意事项.具体如下: 文件路径:aoli/admin/Lib/Action/IndexAction.class.php 代码如下: <?php class IndexAction extends Action{ public function index(){ $this->display(); } public function to

android studios-android studio安装时还是提示java.exe没有找到

问题描述 android studio安装时还是提示java.exe没有找到 以前都用的是eclipse,但是今天下载了一个android studio,安装时就提示没有找到java.exe 解决方案 图片裂了. 不过建议使用intellij 开发工具.很适合android 开发,结合maven可以很方便的使用优秀的开源组件

Android的Fragment 进入时显示正在加载

问题描述 Android的Fragment 进入时显示正在加载 像微信那样,地址四个功能,点击尚为加载的Fragment显示 一个在加载的进度条(圆形的)不是ProgressDialog喔, 没有思路.