지금껏 GC의 힘을 믿고.. 자바에서 메모리 문제 신경쓴적 없는데..

 

으.. 이상한데서 발목 잡혀 버렸습니다.

 

이미지가 여러개 있으면 이전, 다음 버튼을 누를시에 ImageView에 이전그림 다음그림을 보여지는 간단한 내용입니다.

 

각각의 이미지는 byte[]로 되어있어 Bitmap 객체로 만들어 두었습니다.

 

액티비티간 이동이 또 있는데 intent는 용량제한이 있어 안되길레 클래스 하나 임시로 만들고 Bitmap 객체를 static 으로 두었구요..

 

결론적으로.. 이미지를 여러개 보다보면 어플이 죽습니다..

 

로그보니.. 메모리 누수 문제네요....;;

 

 

일단 구글링해보니.. Bitmap 때문인것 같습니다..

 

11-25 15:26:48.603: ERROR/AndroidRuntime(18764): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

요래 뜨거든요..

 

 

단순히 이미지 파일을 보여주는것과 달리 Bitmap객체로 만들어 이미지뷰에 뿌려줄때는 뭔가 문제가 있나봅니다 ㅠ

 

또 구글링 해보니..

 

((BitmapDrawable)mQuestion.getDrawable()).getBitmap().recycle();

 

이 문장을 추가하여 recycle 해주면 괜찮다네요..

 

호출위치는 새로운 이미지를 보여주는 소스 mQuestion.setImageBitmap() 전에 호출을 하구요..

 

 

 

그런데 이젠 또 다른 문제를  뿜으면서 어플이 죽네요..

대충보니 recycle 된 이미지를 다시 사용하는거때문?? 인듯 한데요..

 

11-25 15:52:01.583: ERROR/AndroidRuntime(19654): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@477673b0

 

이 문제를 어떻게 해야 할까요;; 일부러 이미지 파일을 만들지 않고 할려고 byte[]데이터로 Bitmap 객체 만들어서 한건데요..

 

 

확실한건.. 특정위치에서 어플이 죽는게 아닌것으로 보아 메모리 관련 문제는 확실해 보입니다..