7

我使用了几个大型可绘制对象,但我不知道如何管理内存泄漏。我跟踪了我的应用程序的堆大小,它不会停止增长(作为分配的内存)。

尤其是“字节数组(byte[])”类型,不断增长,永不减少。(在 Eclipse 的 DDMS 堆视图中)

我的应用程序由一个使用片段的活动组成。这些片段正在显示几个大图像。我尝试将drawables回调设置为null,将drawables设置为null,当我弹出一个片段但堆永远不会减少时,清除我的易失性缓存(这可以防止我的应用程序执行过多的磁盘IO)。

事实上,每次我调用: Drawable.createFromResourceStream(context.getResources(), value, new FileInputStream(f), f.getName(), opts); 堆长大了。我怎样才能释放内存?

谢谢 !

4

2 回答 2

6

当 Java 在内存中发现您的代码引用的对象时会发生内存泄漏,这会阻止垃圾收集器释放此内存。Android 中的一个常见原因是引用 Activity 上下文而不是 Application 上下文。确保您的上下文引用了应用程序(即使用getApplicationContext而不是使用this。查看此视频以获取有关内存泄漏的解释并查看此问题

于 2012-09-15T14:49:32.153 回答
3

这个问题似乎得到了回答,但 Romain Guy 的帖子似乎与获取更多信息有关:避免内存泄漏

显然,如果您(例如)通过使用 setBackgroundDrawable* 将可绘制对象设置为文本视图的背景图像(从而将可绘制对象附加到视图)然后更改方向(破坏活动并重绘 UI),可绘制对象仍然具有访问旧活动(在旧活动销毁之后),从而造成内存泄漏。

*(作为旁注 - setBackgroundDrawable自 API 级别 16 以来已被弃用

于 2013-07-10T23:17:17.473 回答