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

ViewPager에서의 Bitmap recycle

0 추천

안녕하세요.

카톡 갤러리처럼 좌우로 스와이프 하여 여러개의 이미지가 하나씩 보여지는 기능을 만들고 있습니다.

뷰페이저에 이미지뷰를 올리는 식으로 구현을 했고요.

메모리 문제는 이전 질문에 캐시를 이용하라는 조언을 듣고 어느정도는 해결이 됐습니다만 

가끔 한번씩 메모리 아웃이 뜹니다.

 

이미지들이 좀 크거든요? 그것때문인가 해서

PagerAdapter.destroyItem 메서드에서 ImageView의 Bitmap을 recycle 해주도록 구현을 했습니다.

여기서 문제가 발생하는데요,

그러니까.. 2번 화면 > 3번 화면 > 2번 화면 이런식으로 왓다갔다 하면

recycle 된 비트맵을 사용했다고 에러메시지가 뜹니다.

예상해보기론 2>3으로 이동하는 과정에서 1번 이미지가 destroy 되었는데

다시 2로 돌아오면서 1을 재생성하는 과정에서 발생한 문제인가.. 생각하고 있습니다.

 

하지만 뷰 자체도 아예 새로 inflate 하는데다가 

검색을 통해 얻은 DiskLruCache 소스를 사용하는데 소스를 쭉 둘러봤습니다만

비트맵을 지역변수로 사용하기때문에 전혀 다른 객체인데 말이에요..ㅜㅜ

 

같은 파일을 decode 해왔지만 recycle 된 비트맵 객체와 새로 만들어온 비트맵은 전혀 다른 객체 아닌가요?

이 에러가 나는 상황을 어떻게 해결해야 할지요?

왜 이런 문제가 발생하는것인지 전혀 감이 잡히지 않습니다. ㅜㅜ 도와주세요.

 

에러메시지가 길어서 일부만 올리겠습니다.

11-12 20:07:33.778: E/AndroidRuntime(9979): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@431c0498
11-12 20:07:33.778: E/AndroidRuntime(9979): at android.graphics.Canvas.throwIfRecycled(Canvas.java:1026)
11-12 20:07:33.778: E/AndroidRuntime(9979): at android.graphics.Canvas.drawBitmap(Canvas.java:1127)
11-12 20:07:33.778: E/AndroidRuntime(9979): at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:393)
11-12 20:07:33.778: E/AndroidRuntime(9979): at android.widget.ImageView.onDraw(ImageView.java:979)
 
ire (3,900 포인트) 님이 2013년 11월 12일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...