I've an activity that uses full screen SurfaceHolder
, opening camera for preview (based on zxing
code).
Starting this activity results slow (1.x second), I think because of the heavy lifting of the camera manager. I'm using onResume
method; is it a good idea to move the code inside an AsyncTask
?
I'd like to immediately render the layout and then wait for the camera (i think it's a better user experience). How can i handle this?
Activity
private class CameraTask extends AsyncTask<Void, Void, Void> {
SurfaceHolder.Callback callback;
public CameraTask(SurfaceHolder.Callback callback) {
this.callback = callback;
}
protected void doInBackground() {
cameraManager = new CameraManager(getApplication());
viewfinderView = (ViewFinderView) findViewById(R.id.viewfinder_view);
viewfinderView.setCameraManager(cameraManager);
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
if (hasSurface) {
initCamera(surfaceHolder);
} else {
surfaceHolder.addCallback(callback);
}
}
}
This code has no errors, but layout rendering still wait for camera opening.
I'm calling execute method of AsyncTask
in onResume
, is it the correct location?