Android (cámara): ¿Cómo sincronizar stopPreview () con onPictureTaken ()?

Tengo una aplicación en la que el cliente usa la cámara para tomar una foto. La vista previa de la imagen se muestra en la tableta con un SurfaceView, antes de que la persona presione el botón "clic". Cuando la persona pulsa el botón de clic, se llama al método onPictureTaken y, en ese método, guardo la imagen y también invoco el método camera.stopPreview () (para que el usuario pueda ver la imagen que se tomó).

Sin embargo, hay un problema ... Si el usuario se mueve alrededor de la tableta en el momento en que se toma la fotografía,la imagen fija que se muestra en realidad después de que el método stopPreview se llame NO corresponde a la que obtengo en la matriz de bytes del método onPictureTaken. Hay un retraso de algunos milisegundos en el que hace que la diferencia se destaque cuando el usuario se mueve alrededor de la tableta justo antes de que se tome la fotografía (sé que el 99% de las personas no moverán la tableta mientras se toma la fotografía, pero mi cliente realmente notó este problema y lo quiere arreglado ...). He intentado mover la operación de guardar a un subproceso separado, como se muestra a continuación, para que el método onPictureTaken pueda ejecutarse lo más rápido posible. Aún así, no tuvo ningún efecto en absoluto ...

private PictureCallback pictureCallback = new PictureCallback() {

    public void onPictureTaken(byte[] data, Camera camera) {

        camera.stopPreview();
        reference = data;

        new PictureCallbackHeavy().execute();
    }
};

También tengo que llamar a camera.stopPreview () ANTES de llamar al método takePicture (y no dentro del método onPictureTaken ()). Pero el resultado es el mismo.

¿Qué puedo hacer para sincronizar el método stopPreview para que pueda mostrar EXACTAMENTE la imagen que se tomó y que se encuentra en la matriz de bytes de la devolución de llamada onPictureTaken ()?

¡¡Gracias de antemano!! =)

Respuestas a la pregunta(1)

Su respuesta a la pregunta