博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android使用 startActivityForResult 、 onActivityResult 时的注意事项
阅读量:5878 次
发布时间:2019-06-19

本文共 1507 字,大约阅读时间需要 5 分钟。

  hot3.png

今天使用 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了

转载于:https://my.oschina.net/zhouz/blog/213105

你可能感兴趣的文章
AtCoder Regular Contest 067
查看>>
学习Javascript的书籍(转)
查看>>
css知多少(11)——position(转)
查看>>
selenium工作的大概原理
查看>>
《WPF程序设计指南》读书笔记——第7章 Canvas
查看>>
建网站
查看>>
.NET Core使用swagger进行API接口文档管理
查看>>
Socket 一个服务器监听多个客户端 功能实现
查看>>
代码评审的真相
查看>>
Python开发【第一篇】:目录(此文复制粘贴于武沛齐博客园)
查看>>
Cassandra LeveledCompaction在SSD上对写性能的影响
查看>>
python2 编码与解码
查看>>
js 简单问题
查看>>
VirtualBox虚拟机网络设置(四种方式)
查看>>
TortoiseGit's Settings
查看>>
7.生产者消费者 案例 (使用Lock 同步锁 方式,使用Condition完成线程之间的通信)...
查看>>
PS软件怎么把视频转成gif动态图?
查看>>
angular分页插件tm.pagination 解决触发二次请求的问题
查看>>
2013我在奔波中走过-----------那年的高考改变了我们什么? 分类: ...
查看>>
Python数据结构和算法学习笔记2
查看>>