마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ImgeView에 지정한 이미지파일을 recycle 시키는 방법이 있나요?

0 추천
ImageView.setBackGroundResource(R.drawble.img1);

위와 같은 코드로 이미지뷰에 이미지파일을 지정했을때

비트맵의 recycle(); 함수처럼 이미지뷰에 지정된 이미지를 해제시켜

메모리를 환원시킬 수 있는 방법을 알고 싶습니다.

현재 아웃 오브 메모리 오류가 자꾸나서요 ㅠㅠ

엑티비티가 종료가 됐을시 OnDestroy 함수에서 비트맵처럼 이미지뷰에 지정된

이미지도 recycle시켜 메모리를 환원 하고 싶어서 그렇습니다

개발자 선배님들의 조언 부탁드립니다.
a12243 (560 포인트) 님이 2017년 1월 2일 질문

2개의 답변

0 추천
aucd29 (218,390 포인트) 님이 2017년 1월 2일 답변
0 추천
/**
   * 모든 image view의 bitmap 비우기
   *
   * @param viewGroup layout
   */
  public static void recycleAllImageBitmap(ViewGroup viewGroup) {
    int count = viewGroup.getChildCount();

    for (int i = 0; i < count; i++) {
      if (viewGroup.getChildAt(i) instanceof ViewGroup) {
        recycleAllImageBitmap((ViewGroup) viewGroup.getChildAt(i));
      }
      else {
        View v = viewGroup.getChildAt(i);
        if (v instanceof ImageView) {
          recycleImageView(((ImageView) v));
        }
      }
    }
  }

  /**
   * ImageView bitmap 비우기
   *
   * @param iv
   */
  public static void recycleImageView(ImageView iv) {
    try {
      iv.setImageBitmap(null);
    } catch (Exception e) {

    }

    try {
      iv.setImageResource(android.R.color.transparent);
    } catch (Exception e) {

    }

    try {
      iv.setImageDrawable(null);
    } catch (Exception e) {

    }

    try {
      iv.setBackgroundResource(android.R.color.transparent);
    } catch (Exception e) {

    }

    try {
      iv.setBackground(null);
    } catch (Exception e) {

    }

    try {
      iv.setBackgroundColor(Color.TRANSPARENT);
    } catch (Exception e) {

    }

    try {
      iv.destroyDrawingCache();
    } catch (Exception e) {

    }

    try {
      iv.destroyDrawingCache();
    } catch (Exception e) {

    }
  }

picasso 를 쓰지만, onDestroy 에서 이 것도 호출하고 있어요.

UIUtil.recycleAllImageBitmap((ViewGroup) ((ViewGroup) this.findViewById(android.R.id.content)).getChildAt(0));

 

쎄미 (162,410 포인트) 님이 2017년 1월 3일 답변
...