안드로이드 개발 질문/답변
(글 수 45,052)
어떻게 해야할지를 모르겠습니다. 결국 질문을 올리네요.
개발하는 어플 특성상 Bitmap 을 ArrayList 로 잡고있습니다. 네.. 메모리 엄청 먹죠.
이미지 사이즈를 줄이는건 해결책이 아닙니다. 언젠간 분명히 죽습니다.
지금 기본적으로 이형태인데요...
어레이에 비트맵을 올리는데 메모리가 모자라거나 하면 경고를 띄워주거나 안쓰는걸 해제하거나 하는 분기문을 줘야하겠지만...
방법을 못찾겠습니다. BitmapFactory 만 쓰면 앱 자체가 자꾸 죽으니까.. 환장하겠습니다.
일단 앱이 안죽어야 뭘 하든지 할텐데 말이죠..
어떻게 여유 메모리를 체크한다든지.. BitmapFactory 가 실패하는 걸 캐치할수있는 루틴이 없을까요..?
감사합니다.
어레이에 비트맵을 올리는데 메모리가 모자라거나 하면 경고를 띄워주거나 안쓰는걸 해제하거나 하는 분기문을 줘야하겠지만...
방법을 못찾겠습니다. BitmapFactory 만 쓰면 앱 자체가 자꾸 죽으니까.. 환장하겠습니다.
일단 앱이 안죽어야 뭘 하든지 할텐데 말이죠..
어떻게 여유 메모리를 체크한다든지.. BitmapFactory 가 실패하는 걸 캐치할수있는 루틴이 없을까요..?
감사합니다.
public class Main extends Activity {
public Button btn;
public ImageView img;
public String filepath = "/sdcard/testImage/original/testImage_";
public int fileCounter = 0;
public ArrayList<Bitmap> bmList = new ArrayList<Bitmap>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
img = (ImageView)findViewById(R.id.img);
btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(btnListener);
}
View.OnClickListener btnListener = new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// 여기서 여유 메모리가 있는지를 체크해서 분기를 시키고 싶습니다.
bmList.add(
BitmapFactory.decodeFile(
String.format(filepath + "%04d.jpg", fileCounter++)
)
);
img.setImageBitmap(bmList.get(bmList.size()-1));
}
};
}




Activity에 onLowMemory() 라는 메서드가 있긴 합니다만,
제대로 호출되는지는 모르겠습니다.
API 설명상으로는 메모리 부족 상태가 발생해서 캐쉬 데이터를 날릴 적기라고 나와 있긴 한데...
전 Count Limit를 두고 이걸 넘으면 맨 처음에 넣은 것을 recycle()시키는 방식으로 했습니다.