본문 바로가기

프로그래밍/안드로이드

안드로이드 리스트뷰 비트맵 성능 최적화

안드로이드 리스트뷰 비트맵 성능 최적화


안드로이드 리스트뷰 비트맵 성능 최적화를 위한 방법입니다.

리스트뷰는 안드로이드로 개발을 하다보면 아주 많이 사용되는 녀석중 하나 입니다.

몇개 되지 않는 녀석들은 문제가 되지 않지만 많은 양의 데이터 또는 다수의 이미지(Bitmap)가 들어 간다면 성능은 미춰버릴 정도로 느려지거나 버벅일 때가 발생합니다.


그럴때 사용하면 좋은 녀석이 SoftReference 라는 녀석이 있습니다. 사용법은 간단하니 걱정하지마세요.


public class BitmapCache extends HashMap<Integer, SoftReference<Bitmap>>{


Bitmap cacheImg = BitmapFactory.decodeResource(getResources(),     

R.drawable.noimage);


public SoftReference<Bitmap> get(Integer key) {

String id = key.toString();


if(super.get(id) == null || super.get(id).get() == null){

Bitmap _bitmap;

if((Integer)key > 0){

_bitmap = 

MediaStore.Images.Thumbnails.

getThumbnail(getContentResolver(), 


(Integer)key,     


MediaStore.Images.Thumbnails.MICRO_KIND, null);

}else{

_bitmap = cacheImg;

}

if(_bitmap != null){

put(id, new SoftReference<Bitmap>(_bitmap));

}

}

return super.get(id);

}

}



위의 코드는 실제로 제가 사용한 코드이며 사용단말의 모든 이미지를 가지고 와서 리스트로 뿌려줄때 사용하는 녀석입니다.

SoftReference라는 녀석의 장점은 Bitmap을 사용하다가 JVM에서 OutOfMemoryError 가 발생하기 전에 자기가 알아서 메모리 상에서 날려 버리는 일을 해줍니다.


그러니 어느정도까지는 걱정하지 않아도 되겠지요?


사실상 SoftReference라는 놈은 어느정도 자바를 다루신 분들은 굉장히 익숙한 녀석일 겁니다. 저처럼 초보개발자이 신분들은 메모리땜시 간간히 죽어버리는 앱을보며 휴대폰을 확! 기냥 던져버리고 싶을때가 많으실거에요. 몇시간을 삽질하다가 겨우 해결해낸 방법이니 도움이 되셨으면 좋겠습니다.


그럼 즐프하세요.