アプリでカメラを使用すると、メモリに問題があります。私は写真を撮るためにSurfaceViewを使用しました。log catで写真を撮った後、ヒープメモリが30 mb、場合によっては40mbに増加することを示しています。このため、アプリが「OutofMemoryException」もクラッシュすることがあります。ここに私のコードを提供しています。私を助けてください。
surfaceView = (SurfaceView) findViewById(R.id.camerapreview);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
capture.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View arg0) {
camera.takePicture(myShutterCallback, myPictureCallback_RAW,
myPictureCallback_JPG);
capture.setClickable(false);
}
});
PictureCallback myPictureCallback_RAW = new PictureCallback() {
@Override
public void onPictureTaken(byte[] arg0, Camera arg1) {
System.out.println("myPictureCallback_RAW");
}
};
PictureCallback myPictureCallback_JPG = new PictureCallback() {
@Override
public void onPictureTaken(byte[] arg0, Camera arg1) {
try {
bitmapPicture = BitmapFactory.decodeByteArray(arg0, 0,
arg0.length);
}
catch (OutOfMemoryError e) {
Toast.makeText(FromCamera.this, "Please try again",
Toast.LENGTH_SHORT).show();
}catch (Exception e) {
Toast.makeText(FromCamera.this, "Please try again",
Toast.LENGTH_SHORT).show();
}
capture.setEnabled(false);
buttonBack.setVisibility(View.VISIBLE);
buttonDone.setVisibility(View.VISIBLE);
buttonBack.setEnabled(true);
buttonDone.setEnabled(true);
}
};
ShutterCallback myShutterCallback = new ShutterCallback() {
@Override
public void onShutter() {
System.out.println("onShutter");
}
};
ガベージコレクションを強制的に試しましたが、まだ役に立ちません。
public void surfaceDestroyed(SurfaceHolder holder) {
if (camera != null) {
camera.stopPreview();
camera.release();
camera = null;
}
previewing = false;
}