2012-01-15 110 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