2011-11-20 2 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 

나는 이미지 뷰를 삭제 여기에서 코드를 시도하지만 문제가 해결되지 않은 :

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

는 두 가지 문제가 있습니다 : GC가 빨리가에있다으로 실행되지 않을 수 있습니다

    1. 귀하의 이미지가 너무 크다. 비트 맵을 사용하는 경우보기에서 제거한 후에 recycle()으로 전화해야합니다. 이렇게하면 GC가 메모리를 회수 할 수 있습니다. 이러한 비트 맵을 다른보기에서 재사용해도주의해야합니다.
  • 관련 문제