안드로이드 개발 질문/답변
(글 수 8)
어떻게 해야할지를 모르겠습니다. 결국 질문을 올리네요.
개발하는 어플 특성상 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()시키는 방식으로 했습니다.