2010-11-01 49 views
0

我有一個畫廊部件與關於fitfy(幾乎)全屏幕圖像。圖像從SD卡加載,一次只能看到一個圖像(滾動時接受重疊)。問題是滾動大約35張圖片後,我得到OutOfMemoryError:位圖超出虛擬機預算。我認爲一個畫廊小部件根據需要處理了視圖,但我想我是錯了,或者做錯了什麼。Android畫廊部件與內存不足問題

我使用CursorAdapter加載數據,並且我注意到每當我滾動到新圖像時,都會調用newView()和bindView()。我認爲這意味着原始觀點已經被處理掉了,但是失憶問題似乎表明了相反的情況。我在很多領域使用ViewHolder。

所以我的問題是:

  1. 是否畫廊控件行爲不同於一個ListView與一個CursorAdapter使用時?
  2. 有沒有辦法強制回收和/或處置意見? (或者我可能做錯了什麼)。
  3. 有關處理此場景內存不足問題的其他建議?降尺寸並不是真正的選擇,畫廊應該能夠處理無限數量的圖像(或至少兩倍)。
+0

你是否在其他地方持有對視圖的引用,以防止它們被GCed? – 2010-11-01 14:41:17

+0

不,我很確定沒有。我試圖儘可能地剝離它。有關陷阱的任何提示?什麼會導致convertView CursorAdapter.getView爲空?由於每次使項目變爲可見時都會調用newView,因此convertView每次都爲空。我可能是錯誤的,但我會假設一個項目要麼保留它的視圖,要麼釋放它以用於GC。此外,如果我只是在前8-10項之間來回滾動,我永遠不會得到OutOfMemory(但仍然會爲每個項目調用newView())。 – 2010-11-01 15:34:54

回答

0

什麼是圖像尺寸?它會導致問題。試試這樣做以減少圖像尺寸:

BitmapFactory.Options o2 = new BitmapFactory.Options(); 
//Best to use powers of 2. 
o2.inSampleSize=2; 
BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
+0

要縮小實際需要增加樣本大小的圖片尺寸。 – Doomsknight 2012-05-23 12:09:52