2011-12-01 18 views
0

在API的演示,有一個effecient列表適配器中,所有的位圖都在適配器構造函數中預裝的例子:查看持有人模式,如何處理適配器中的位圖?

// Icons bound to the rows. 
mIcon1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon48x48_1); 
mIcon2 = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon48x48_2); 

如果適配器必須與很多位圖的交易,是它仍然是一個很好的做法還是會好做的getView類似的東西:

holder.myImage.setImageDrawable(context.getResources().getDrawable(R.drawable.icon48x48_1)); 

注意,在我的情況,我可以有一些像10-15可能的位圖,但只有少數會在相同的使用時間。我擔心適配器使用的內存。

感謝

+0

最好的方法是從緩存中加載圖像。 –

+0

我認爲當滾動列表時,如果將圖像加載到'getView'中,您會感覺到「laggy」的感覺。 – kaspermoerch

回答

1

如果圖標是真正的48×48像素,就不會那麼大,因爲你有一個已知的小集合他們,他們預加載可能是罰款。我不會用,如果這種方法:

  • 圖像是巨大的,或者
  • 正在從高於資源其他地方加載的圖片,或
  • 會有超過幾十多個圖標大小的圖片

您可以隨時從DDMS轉儲堆並使用Eclipse MAT插件檢查它以獲得有關堆空間實際使用情況的透視圖。但是,在蜂窩或冰淇淋三明治上測試它,因爲您可以獲得更好的跟蹤位圖堆消耗的結果。

0

這樣做的一種方法是等待列表停止,然後設置可見列表項的圖像。這樣,您只需加載當前顯示的圖像(與在構造函數中預加載所有內容相比),並且不會使滾動感覺不穩定或緩慢。這需要更多的工作,但它會讓你的列表非常流暢,並且佔用最少的內存。

相關問題