2011-11-20 64 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可以回收内存。但是,如果这些位图在任何其他视图中都被重用,请注意。
相关问题