<Android>从窗口泄漏谈android:configChanges属性
今天有幸去哥们的大公司做了半天的暂时工,一个偶现的Bug折腾了他好久,好不easy今天抓到了异常Log日志。大致的意思就是android.view.windowleaked——窗口泄漏。我在网上查了资料:
Android的每个Activity都有个WindowManager窗口管理器,构建在某个Activity之上的对话框、PopupWindow也有对应的WindowManager窗口管理器。由于Dialog、PopupWindown不能脱离Activity而单独存在着,所以当承载某个Dialog或者某个PopupWindow正在显示的Activity被finish()后。而Dialog(或PopupWindow)没有正常退出的话,就会抛Window
Leaked错误了,由于这个Dialog(或PopupWindow)的WindowManager已经没有谁能够附属了,所以它的窗口管理器就泄漏了。
依据此信息分析出,在进入新的Activity时突然转屏(哥们开发的sdk支持横竖屏切换)。由于在AndroidManifest.xml中没有配置android:configChanges属性,此时Activity会又一次调用onCreate方法,即会又一次调用整个生命周期。而此时的Dialog已经显示并没有dismiss。所以造成了窗口泄漏。解决办法就变得如此简单,在AndroidManifest.xml中配置android:configChanges属性,这样当我们横竖屏切换的时候会调用Activity的onConfigurationChanged方法,不会又一次调用整个生命周期了。
我们最后配置了android:configChanges="screenSize|orientation|keyboardHidden|navigation"。
既然谈到了android:configChanges属性,我又做了进一步的研究,综合网上的资料,总结出:
1、不设置Activity的android:configChanges时。切屏会又一次调用整个生命周期,切横屏时会运行一次,切竖屏时会运行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会又一次调用整个生命周期,切横、竖屏时仅仅会运行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会又一次调用整个生命周期,仅仅会运行onConfigurationChanged方法
可是。自从Android 3.2(API 13),在设置Activity的android:configChanges="orientation|keyboardHidden"后。还是一样会又一次调用各个生命周期的。由于screensize也開始跟着设备的横竖切换而改变。所以在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,假设你想阻止程序在执行时又一次载入Activity,除了设置"orientation"。
你还必须设置" screenSize"。
——以上信息从网上看到,认为非常实用,但自己并没有验证过,只是相信也是LZ验证过发出的,应该会非常实用的。
附上android:configChanges属性解释:
VALUE | DESCRIPTION |
"mcc" | 国际移动用户识别码所属国家代号是改变了----- sim被侦測到了,去更新mcc mcc是移动用户所属国家代号 |
"mnc" | 国际移动用户识别码的移动网号码是改变了------ sim被侦測到了。去更新mnc MNC是移动网号码,最多由两位数字组成。用于识别移动用户所归属的移动通信网 |
"locale" | 地址改变了-----用户选择了一个新的语言会显示出来 |
"touchscreen" | 触摸屏是改变了------一般是不会发生的 |
"keyboard" | 键盘发生了改变----比如用户用了外部的键盘 |
"keyboardHidden" | 键盘的可用性发生了改变 |
"navigation" | 导航发生了变化-----通常也不会发生 |
"screenLayout" | 屏幕的显示发生了变化------不同的显示被激活 |
"fontScale" | 字体比例发生了变化----选择了不同的全局字体 |
"uiMode" | 用户的模式发生了变化 |
"orientation" | 屏幕方向改变了 |
"screenSize" | 屏幕大小改变了 |
"smallestScreenSize" | 屏幕的物理大小改变了,如:连接到一个外部的屏幕上 |
今天收获不小。见识了大公司的霸气,也加深了android:configChanges属性的了解。
<Android>从窗口泄漏谈android:configChanges属性的更多相关文章
- [Android 泥水匠] Android基础 之一:浅谈Android架构到HelloWorld案例的剖析
作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583] ...
- android窗口泄漏,isInEditMode解决可视化编辑器无法识别自定义控件的问题
android窗口泄漏 在做项目是遇到这个错误:google:WindowManager: Activity has leaked window. 产 生原因:我们知道Android的每一个Activ ...
- 浅谈Android应用性能之内存
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 文/ jaunty [博主导读]在Android开发中,不免会遇到许多OOM现象,一方面可能是由于开 ...
- 浅谈Android样式开发之View Animation (视图动画)
引言 一个用户体验良好的App肯定少不了动画效果.Android为我们提供了2种动画框架,分别是视图动画(View Animation)和属性动画(Property Animation).视图动画比较 ...
- 浅谈Android样式开发之selector
引言 上一篇Android UI中文章我们详细介绍了Android中shape标签的使用.通过shape标签我们可以定义矩形.椭圆.环形.直线等效果.不过shape只能定义单一的形状,在实际开发中,我 ...
- Android安全开发之浅谈密钥硬编码
Android安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很大风 ...
- 浅谈Android应用保护(一):Android应用逆向的基本方法
对于未进行保护的Android应用,有很多方法和思路对其进行逆向分析和攻击.使用一些基本的方法,就可以打破对应用安全非常重要的机密性和完整性,实现获取其内部代码.数据,修改其代码逻辑和机制等操作.这篇 ...
- Android内存优化-内存泄漏的几个场景以及解决方式
转自:http://blog.csdn.net/a910626/article/details/50849760 一.什么是内存泄漏 在Java程序中,如果一个对象没有利用价值了,正常情况下gc是会对 ...
- 系统剖析Android中的内存泄漏
[转发]作为Android开发人员,我们或多或少都听说过内存泄漏.那么何为内存泄漏,Android中的内存泄漏又是什么样子的呢,本文将简单概括的进行一些总结. 关于内存泄露的定义,我可以理解成这样 没 ...
随机推荐
- Java缓存--JCS
添加外部包: jcs-1.3.jar concurrent-10.3.jar cache.cff # optional region "myCache" specific conf ...
- sql 复杂自动编号错误批量修改方案
[一篮饭特稀原创,转载请注明出自http://www.cnblogs.com/wanghafan/p/5133953.html] 前提:自动编号为18位,前4位是年份,中间10位是XXXX,最后四位 ...
- javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- 《ArcGIS Engine+C#实例开发教程》第三讲 MapControl与PageLayoutControl同步
原文:<ArcGIS Engine+C#实例开发教程>第三讲 MapControl与PageLayoutControl同步 摘要:在ArcMap中,能够很方面地进行MapView和Layo ...
- ruby 方法重载
class MyClass def sayHello return "hello from MyClass" end def sayGoodbye return "Goo ...
- SpringBoot入门 一 构建简单工程
环境准备:jdk1.7(推荐)以上,tomcat8(推荐)以上,或者使用插件自带.mevan插件3.2以上,eclipse编辑工具 pom文件基本配置如下 <project xmlns=&quo ...
- Standard Attachments in Oracle Form 标准附件
Standard Attachments in Oracle Form 默认情况下"附件"按钮是灰色的,本文将展示如何让某个Form的附件按钮变亮,并能上传附件. 以用户Form为 ...
- 浏览器编辑HTML
运行效果: 浏览器编辑HTML // test.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...
- CentOS5.5 下编译安装 LAMP
大纲 1.安装gcc编译器 2.卸载rpm安装的http和mysql软件 3.编译安装php依赖包 4.安装apache软件 5.安装mysql软件 6.安装php软件 7.安装memcache ph ...
- NTP 服务器配置
1.yum安装ntp 1 yum install ntp* 2.更新时间 1 ntpdate 202.120.2.101 3.加入任务计划 1 2 crontab -e */10 * * * * nt ...