Camera.release() занимает 30 секунд, чтобы освободить камеру в Nexus 10. Есть ли способ ускорить процесс?

Я использую следующий код для освобождения камеры в onPause. Но линия mCamera.release() занимает в среднем 30 секунд, чтобы выпустить камеру на устройстве Nexus 10. Я добавил регистрацию до и после mCamera.release() и обнаружил, что разница во времени между печатью этих журналов составляет 30 секунд.

private void releaseCamera() {
    if (mCamera != null) {
        previewing = false;
        mCamera.setPreviewCallback(null);
        if(mPreview != null)
        mPreview.getHolder().removeCallback(mPreview);
        Log.e("QR","Starting to call mCamera.release()");
        mCamera.release();
        Log.e("QR","Released Camera");
        mCamera = null;
    }
}

Я вызываю mCamera.stopPreview() перед вызовом releaseCamera()

Есть ли способ, которым я могу сделать это асинхронно? Потому что от деятельности Camerapreview до следующей активности требуется менее минуты.

Edit1: мы уменьшили размер предварительного просмотра с самого высокого (1080x1920) до среднего диапазона (480x800), и все стало нормально работать. Размер предварительного просмотра имеет какое-либо отношение к выпуску камеры в HAL?

Ответ 1

Вы можете попытаться выпустить камеру внутри Thread как обходной путь для этого, хотя это не идеальное решение. Вы можете запустить следующее действие, когда функция release выполняется в фоновом режиме

   new AsyncTask() {

        @Override
        protected Object doInBackground(Object... params) {
            releaseCamera();
            return null;
        };
    }.execute();

Ответ 3

Мне не нужен уровень репутации, чтобы добавить комментарий, поэтому я поставлю его здесь:

new Thread(new Runnable(){
public void run(){
    camera.stopPreview();
camera.setPreviewCallback(null);
camera.unlock();
camera.release();
camera = null;
}

}) начать();.

Когда вызов разблокировки будет запущен в отдельном потоке, это вызовет проблему для другого приложения, которое использует камеру и будет запущено поверх этого. Я также ищу решение. У меня нет Nexus10. У нас есть собственное устройство.