2012-01-15 103 views
0

我有一个重复的Runnable任务,每10秒执行一次setImageResource()(资源是一个jpeg文件)。这是该活动中唯一发生的重大事件。setImageResource耗尽内存

然而,经过几次反复(2-4),应用程序崩溃,出现以下错误:

  • VM不会让我们分配X字节
  • 关闭VM

我没有想到这一点。 GC为什么不清除以前的jpeg位图?我该如何避免崩溃虚拟机?

谢谢。

回答

1

你必须呼吁在前的位图的循环。 Android为图像资源分配内存,直到您用手调用回收方法时才会释放内存。

+0

recycle()不适用于我。虚拟机管理器似乎有7MB的硬盘限制。 (我的jpegs是1024x768,可以扩展为相当大的位图。)具有讽刺意味的是,iPhone对这些相同的位图没有任何问题,所以我对Android的限制深感失望。 – 2012-01-15 19:21:50

+0

我应该提到,在iPhone上,我不得不避免使用imageNamed:方法来加载这些jpeg,因为该方法将它们缓存在系统缓存中。 (我使用了不同的方法)。系统缓存很快就会溢出并导致应用程序崩溃。 Android可能有类似的问题吗? – 2012-01-15 19:30:06

+0

http://developer.android.com/guide/topics/data/data-storage.html这是一篇文章,您可以在Android中找到关于缓存文件的一些信息。 – Orest 2012-01-15 19:34:17

0

你试过setImageResource()之前的图像设置为null:

object.image = null; 
object.setImageResource(); 
+0

是的,我也试过这个。 VM管理器中的相同7MB限制。我很惊讶没有人遇到过这个问题。 – 2012-01-15 19:23:02