关闭Android CameraDevice很慢并挂起应用程序

时间:2017-12-03 17:21:03

标签: android android-camera2

我正在编写一个使用相机的Android应用程序。

我提供了Google提供的示例代码https://github.com/googlesamples/android-Camera2Basic/。但是,我观察到调用CameraDeviceclose()方法花费的时间太长(在我的三星Galaxy S8上差不多一秒钟)。

此方法从onPause()调用,因此应用程序会在相机片段关闭时挂起一段时间。

@Override
public void onPause() {
    closeCamera();
    stopBackgroundThread();
    super.onPause();
}

private void closeCamera() {
    try {
        mCameraOpenCloseLock.acquire();
        if (null != mCaptureSession) {
            mCaptureSession.close();
            mCaptureSession = null;
        }
        if (null != mCameraDevice) {
            mCameraDevice.close(); // This call takes 1 second!
            mCameraDevice = null;
        }
        if (null != mImageReader) {
            mImageReader.close();
            mImageReader = null;
        }
    } catch (InterruptedException e) {
        throw new RuntimeException("Interrupted while trying to lock camera closing.", e);
    } finally {
        mCameraOpenCloseLock.release();
    }
}

如何在调用closeCamera()方法时避免应用程序无响应?

我试图从另一个线程调用它而不是UI线程,但在某些情况下应用程序崩溃。

1 个答案:

答案 0 :(得分:1)

当我的设备(mi a1 - oreo)被修补的靴子闪现时,我遇到了这个问题。

如果您的设备也有补丁启动,请尝试使用库存启动进行闪存。它对我有帮助。