【发布时间】:2014-02-24 10:17:02
【问题描述】:
我的问题是关于我面临的内存泄漏(android 开发),但无法找到相同的根本原因。
我有两个班级 - A 和 B。 A类有一个对象B - objectB。 B 类有一个位图类型的实例变量 mTempBitmap。 在 A 类中,我创建了一个位图对象 aBitmapObject 并初始化 - objectB.mTempBitmap = aBitmapObject。 在 B 类中,我在 API onDraw() 中将 mTempBitmap 设置为 null。
现在,发生的情况是,在每次按键时,都会更新 objectB 的 mTempBitmap,然后调用 objectB.onDraw。 但是,如果我们按键太快,有时 onDraw() 将不会被调用。
在这种情况下,我可以看到内存泄漏。如果我进行堆转储并使用内存分析器 MAT 工具进行分析,我会发现 50-60 个位图对象,这是意料之外的。
所以,虽然我阅读了一些关于它的 SO 帖子,但我并不清楚 Java 中内存泄漏的定义。
在上述情况下发生的内存泄漏会不会是因为 onDraw() 没有被调用,并且 objectB.mTempBitmap 没有被更新为 null ? (afaik,即使objectB.mTempBitmap没有被设为null,后面的mTempBitmap会指向另一个位图,所以应该没有内存泄漏的问题。) 是因为在某个地方创建了位图副本并且它们泄漏了吗?当我们初始化 objectB.mTempBitmap = aBitmap 时,是否创建了任何位图副本,或者只是将另一个引用附加到同一个位图? (afaik,只是对同一位图的另一个引用,没有创建新的位图副本)
如果有人有想法,请帮忙!
【问题讨论】:
标签: java android memory-leaks bitmap android-memory