안녕하세요.
카톡 갤러리처럼 좌우로 스와이프 하여 여러개의 이미지가 하나씩 보여지는 기능을 만들고 있습니다.
뷰페이저에 이미지뷰를 올리는 식으로 구현을 했고요.
메모리 문제는 이전 질문에 캐시를 이용하라는 조언을 듣고 어느정도는 해결이 됐습니다만
가끔 한번씩 메모리 아웃이 뜹니다.
이미지들이 좀 크거든요? 그것때문인가 해서
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)