2011-11-20 107 views
0

我有一個應用程序,我使用ViewPager並設置在每個頁面「片段」的圖像。ViewPager:位圖大小超過VM預算

當我滾動視圖尋呼機後圖像25它給我的內存異常,但我刪除圖像,每次轉到下一頁。

檢查下面的代碼:

public void destroyItem(View collection, int position, Object view) { 
    Log.d("**", "remove image"); 
    ((ViewPager) collection).removeView((ImageView) view); 
} //method: remove item from pager adapter 

我試圖代碼從這裏到刪除的ImageView,但它並沒有解決的問題:

private void unbindDrawables(View view) { 
    if (view.getBackground() != null) { 
      view.getBackground().setCallback(null); 
    } 
    if (view instanceof ViewGroup) { 
     for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { 
      unbindDrawables(((ViewGroup) view).getChildAt(i)); 
     } 
     ((ViewGroup) view).removeAllViews(); 
     } 
} 

編輯:
下面的代碼就能解決問題,但我想使用完整的圖像大小,爲什麼它不是刪除圖像?

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inSampleSize = 2; //reduce image size 

回答

1

有兩個可能的問題:

  1. 您的圖片只是太大
  2. 的GC可能無法迅速,因爲它要運行。如果您使用的是位圖,則應在從視圖中移除它們後調用recycle()。這確保GC可以回收內存。但是,如果這些位圖在任何其他視圖中都被重用,請注意。
相關問題