static 带来的奇怪的bug
来源:互联网 发布:unity3d导航系统 编辑:程序博客网 时间:2024/05/22 07:02
原来的网址:http://www.2cto.com/kf/201305/209445.html
大家都知道static变量有很多好处就是可以在保存全局数据。但是由此可能带来很隐蔽的BUG。
情况:
本人在开发一个项目的时侯有切身的体会,以下这个BUG查找了很久才知道。由于多个人开发的项目。某个同事使用了static预先缓存一些列表数据,方便下个界面使用。该数据保存了一些图片的引用,而这些图片又单独在另外一个列表保存,但是在退出程序的时侯又把这些图片Recycle(回收)了。
现象:
偶尔进入程序出现使用了已回收的图片的问题。
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap
分析:
由于Android架构设计原因,在程序退出时,static数据并没有立即得到清理。在上面的案例中可以发现,当预先加载网络数据比较慢,再进入下一个界面时,发现static变量有数据。这个时侯就使用这个数据就是程序退出时的数据,但该数据引用的图片已回收。就导致前面的现象发生。
解决:
在退出程序时,同时清空static变量里面的数据。
建议:
在开发的过程中,尽量少使用static数据,尽量把static变量集中在一个类。(仅供参考)
延伸:
Android退出程序时,没有把static数据立即清理的验证。
public class TestStatic {
private static int nValue = 0;
static {
nValue += 100;
}
public TestStatic() {
nValue += 300;
Log.i("TestStatic", "nValue:"+nValue);
}
}
结果:
05-09 11:15:04.589: I/TestStatic(8093): nValue:400
05-09 11:15:08.309: I/TestStatic(8093): nValue:700
第一次进入程序时,先执行static代码,再到TestStatic();
第二次进入程序时,直接执行TestStatic(),跳过了static代码;
- static 带来的奇怪的bug
- 奇怪的static
- 奇怪的C++ static
- 一个奇怪的bug
- 奇怪的BUG
- Eric奇怪的Bug
- 一个奇怪的bug
- scala奇怪的bug
- Instr 带来的BUG
- 前车之鉴-ASSERT带来的奇怪错误1
- 第一个drawable带来的奇怪问题
- 关于float奇怪的bug
- android奇怪的bug记录
- JAVA Script的奇怪bug
- spark一个奇怪的bug
- java Static的bug
- VC7.1的一个奇怪的bug
- Delphi 7 的一个奇怪的Bug
- Java Decimal详解,附带大量实例
- error: expected nested-name-specifier before 'const_iter' 的解答
- cpu 大小端模式
- bzoj1198: [HNOI2006]军机调度
- 关于Apache Flex 4.12
- static 带来的奇怪的bug
- SeekBar(手拉进度条)应用
- Android上开源的酷炫的交互动画和视觉效果:Interactive-animation
- 最近面试各家公司用到的新技术
- 编写linux设备驱动程序
- Android Studio遇到的问题
- VC常见的108个问题
- using namespace std详解
- 赘转谞驻族赚渍谞最注驻族赚渍谞