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

关闭Android CameraDevice很慢,会挂起应用程序,android,android-camera2,Android,Android Camera2,我正在编写一个使用摄像头的Android应用程序 我采用了谷歌提供的示例代码。然而,我注意到调用的close()方法花费的时间太长(在我的三星Galaxy S8上几乎是一秒钟) 此方法是从onPause()调用的,因此当摄影机片段关闭时,应用程序会挂起一段时间 @Override public void onPause() { closeCamera(); stopBackgroundThread(); super.onPause(); } private void c

我正在编写一个使用摄像头的Android应用程序

我采用了谷歌提供的示例代码。然而,我注意到调用的
close()
方法花费的时间太长(在我的三星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线程以外的另一个线程调用它,但在某些情况下应用程序会崩溃。

当我的设备(mi a1-oreo)使用补丁启动时,我遇到了这个问题

如果您的设备也有补丁引导,请尝试使用库存引导闪存。这对我很有帮助。

请参见