(转)ProgressDialog的hide()和dismiss()方法
来源:互联网 发布:淘宝小号怎么申请 编辑:程序博客网 时间:2024/06/02 20:36
原地址:http://blog.csdn.net/u014302433/article/details/50544566
在使用ProgressDialog作为网络加载数据的请求过程中,当数据加载完成,笔者很自然的将ProgressDialog调用了hide()方法,在当前activity退出时,遇到问题了Android.view.WindowLeaked: Activity com.xxx.xxx.hangup.ProgressDialogActivity has leaked window com.android.internal.policy.PhoneWindow$DecorView{dd0bacf G.E...... R.....I. 0,0-684,0} that was originally added here
这个问题是说当前dialog所依附的activity被销毁,dialog依然存在,未被销毁。这真是平时使用api时,没怎么注意的结果呀。调用hide()方法是可以实现dialog的隐藏,但是dialog对象并未销毁。
下面是一个简单的测试这种异常代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
上面注释是异常log信息。
下面看下hide()和dismiss()方法的具体实现:
hide()源码实现如下: /**
* Hide the dialog, but do not dismiss it.
*/
public void hide() {
if (mDecor != null) {
mDecor.setVisibility(View.GONE);
}
}
很明确的看到dialog是一个view视图,而hide()实现中只是将view设置为gone,并未移除。
dialog的dismiss()方法如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
在看下dismissDialog内的实现:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
看到了mWindowManager.removeViewImmediate(mDecor)的代码。
至此,dialog的view才被真正移除。
希望小伙伴们不要犯和我一样的low的错误。。。
- (转)ProgressDialog的hide()和dismiss()方法
- ProgressDialog的hide()和dismiss()方法
- Android 开发 对话框Dialog dismiss和hide方法的区别
- Android 开发 对话框Dialog dismiss和hide方法的区别
- Android 开发 对话框Dialog dismiss和hide方法的区别
- Android 开发 对话框Dialog dismiss和hide方法的区别
- Android dialog的hide和dismiss方法分析
- Android 开发 对话框Dialog dismiss和hide方法的区别
- Android 开发 对话框Dialog dismiss和hide方法的区别
- (转)Android 开发 对话框Dialog dismiss和hide方法的区别
- ProgressDialog的dismiss方法与cancel方法的区别
- ProgressDialog的dismiss方法与cancel方法的区别
- Android学习——对话框Dialog dismiss和hide方法的区别
- Android 的ProgressDialog的dismiss()与cancel()方法的区别
- 关于ProgressDialog不被dismiss的问题
- android dialog dismiss cancel hide 的区别
- (转)ProgressDialog 已经 dismiss 了还是显示
- (转)ProgressDialog调用dismiss()不消失
- MySQL的enum与set约束
- 53. Maximum Subarray
- 学习小记——后缀数组
- USB总线介绍
- strut2验证之XML声明式文档验证
- (转)ProgressDialog的hide()和dismiss()方法
- 参考网上资料,整理的华为编程要求
- 递归
- Oracle 数据库安装以及配置
- unity之动画分层
- gobject 中 g_object_new 流程简介
- 异常
- 网络编程
- qconf安装过程遇到的问题及解决方案