我正在编写一个使用相机的Android应用程序。
我提供了Google提供的示例代码https://github.com/googlesamples/android-Camera2Basic/。但是,我观察到调用CameraDevice
的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线程,但在某些情况下应用程序崩溃。
答案 0 :(得分:1)
当我的设备(mi a1 - oreo)被修补的靴子闪现时,我遇到了这个问题。
如果您的设备也有补丁启动,请尝试使用库存启动进行闪存。它对我有帮助。