2012-06-28 129 views
0

我試圖在https://stackoverflow.com/a/6779067/1236259線程hp.android答案,但我從來不活動的調用方法的onDestroyjava.lang.OutOfMemoryError:位圖大小超過VM預算列表視圖

我有圖像的ListView和我打電話其他活動方式:

ImageButton imageButtonSeeMap = (ImageButton)this.findViewById(R.id.imageButtonSeeMap); 
imageButtonSeeMap.setOnClickListener(new OnClickListener() {.... 

從新的活動我再次調用ListView的活動在這一點I'm得到exeption:java.lang.OutOfMemoryError:位圖大小超過VM預算

的圖像該列表視圖被創建使用:

thumb_u = new URL(lp.get(i).getImage()); 
      thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src"); 

      imageViewPoi.setImageDrawable(thumb_d); 

如何釋放圖像的內存? onDestroy方法中的unbindDrawables從不被調用。

有什麼想法?

+0

你可能無法處理具有同時開啓兩個列表。當視圖被回收時,您還需要確保在位圖上調用recycle()。另外這個:'new URL(lp.get(i).getImage()); ... thumb_u.openStream(),「src」);'是一個壞主意。您需要使用AsyncTasks,而不是下載「內聯」。 – dmon

回答

1

圖像是android中的野獸,所以OutofMemory異常是您可能必須習慣的東西。這應該允許你的列表視圖從網絡上獲取圖像,而不會崩潰你的應用程序。

假設第二個代碼塊是從你的ListView的適配器getView()方法,嘗試:

try { 
    thumb_u = new URL(lp.get(i).getImage()); 
    thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src"); 
    imageViewPoi.setImageDrawable(thumb_d); 
} catch (OutOfMemoryError e) { 
    System.gc(); 
    thumb_u = new URL(lp.get(i).getImage()); 
    thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src"); 
    imageViewPoi.setImageDrawable(thumb_d); 
} 
+1

「圖像是野獸」 - 我剛剛在辦公室去世。 – Guardanis

+0

我用你的解決方案,問題依然存在。幾小時後,我注意到其中一個圖像是PNG。我更改爲JPG,並且列表已成功填充。任何想法? –

相關問題