안드로이드 개발 질문/답변
(글 수 45,052)
mBitmap = Bitmap.createBitmap(176, 144,Bitmap.Config.RGB_565);
mBitmap.setPixels(rgb, 0, 176, 0, 0, 176, 144);
위 소스를 카메라 프리뷰 콜백에서 돌리고 있는데요
mBitmap.recycle()함수를 써도 메모리 해제가 안되는 것 같습니다.
아래와 같이 코딩했는데 recycle() 함수를 쓰는 방식이 맞나요??
프로그램이 한 5초정도 돌아가다가 뻑이 남니다..
아무래도 메모리 탓인거 같은데...어찌하면 좋을지 도와주세요~ㅠㅠ
///////////////////////////////////////////////
public void surfaceChanged(SurfaceHolder holder, int format, int w,int h) {
// TODO Auto-generated method stub
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(176,144);
mCamera.setParameters(parameters);
mCamera.startPreview();
mCamera.setPreviewCallback(new PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
// TODO Auto-generated method stub
Canvas c = null;
try{
c = mHolder.lockCanvas(null);
synchronized(mHolder){
mBitmap = Bitmap.createBitmap(176, 144,Bitmap.Config.RGB_565);
decodeYUV(rgb,data,176,144);
mBitmap.setPixels(rgb, 0, 176, 0, 0, 176, 144);
draw(c);
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(mBitmap != null){
mBtimap.recycle();
}
if(c != null){
mHolder.unlockCanvasAndPost(c);
}
}
}
});
}
@Override
public void draw(Canvas canvas) {
// TODO Auto-generated method stub
canvas.drawBitmap(mBitmap, 0,0, null);
}
mBitmap.setPixels(rgb, 0, 176, 0, 0, 176, 144);
위 소스를 카메라 프리뷰 콜백에서 돌리고 있는데요
mBitmap.recycle()함수를 써도 메모리 해제가 안되는 것 같습니다.
아래와 같이 코딩했는데 recycle() 함수를 쓰는 방식이 맞나요??
프로그램이 한 5초정도 돌아가다가 뻑이 남니다..
아무래도 메모리 탓인거 같은데...어찌하면 좋을지 도와주세요~ㅠㅠ
///////////////////////////////////////////////
public void surfaceChanged(SurfaceHolder holder, int format, int w,int h) {
// TODO Auto-generated method stub
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(176,144);
mCamera.setParameters(parameters);
mCamera.startPreview();
mCamera.setPreviewCallback(new PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
// TODO Auto-generated method stub
Canvas c = null;
try{
c = mHolder.lockCanvas(null);
synchronized(mHolder){
mBitmap = Bitmap.createBitmap(176, 144,Bitmap.Config.RGB_565);
decodeYUV(rgb,data,176,144);
mBitmap.setPixels(rgb, 0, 176, 0, 0, 176, 144);
draw(c);
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(mBitmap != null){
mBtimap.recycle();
}
if(c != null){
mHolder.unlockCanvasAndPost(c);
}
}
}
});
}
@Override
public void draw(Canvas canvas) {
// TODO Auto-generated method stub
canvas.drawBitmap(mBitmap, 0,0, null);
}
때까지 처리를 못 끝내는 게 아닐지요...
프리뷰 콜백이 얼마나 빨리 호출되는 지
로그캣으로 체크해보시는 걸 권합니다.