我有一个重复的Runnable任务,每10秒执行一次setImageResource()(资源是一个jpeg文件)。这是该活动中唯一发生的重大事件。setImageResource耗尽内存
然而,经过几次反复(2-4),应用程序崩溃,出现以下错误:
- VM不会让我们分配X字节
- 关闭VM
我没有想到这一点。 GC为什么不清除以前的jpeg位图?我该如何避免崩溃虚拟机?
谢谢。
我有一个重复的Runnable任务,每10秒执行一次setImageResource()(资源是一个jpeg文件)。这是该活动中唯一发生的重大事件。setImageResource耗尽内存
然而,经过几次反复(2-4),应用程序崩溃,出现以下错误:
我没有想到这一点。 GC为什么不清除以前的jpeg位图?我该如何避免崩溃虚拟机?
谢谢。
你必须呼吁在前的位图的循环。 Android为图像资源分配内存,直到您用手调用回收方法时才会释放内存。
你试过setImageResource()之前的图像设置为null:
object.image = null;
object.setImageResource();
是的,我也试过这个。 VM管理器中的相同7MB限制。我很惊讶没有人遇到过这个问题。 – 2012-01-15 19:23:02
recycle()不适用于我。虚拟机管理器似乎有7MB的硬盘限制。 (我的jpegs是1024x768,可以扩展为相当大的位图。)具有讽刺意味的是,iPhone对这些相同的位图没有任何问题,所以我对Android的限制深感失望。 – 2012-01-15 19:21:50
我应该提到,在iPhone上,我不得不避免使用imageNamed:方法来加载这些jpeg,因为该方法将它们缓存在系统缓存中。 (我使用了不同的方法)。系统缓存很快就会溢出并导致应用程序崩溃。 Android可能有类似的问题吗? – 2012-01-15 19:30:06
http://developer.android.com/guide/topics/data/data-storage.html这是一篇文章,您可以在Android中找到关于缓存文件的一些信息。 – Orest 2012-01-15 19:34:17