相关文章
ANR
- 在单独的线程中关闭CameraDevice
提问: 我正在使用Android camera2创建自定义相机. cameraDevice.close()方法很慢,它会使UI冻结1秒钟.我把它放在另一个线程中,它似乎工作得很好.
回答: 我宁愿将所有closeCamera()逻辑放在同一后台线程上.如果您为 openCamera() 提供了 Handler.
manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler);
然后我建议将所有closeCamera()序列发布到此 mBackgroundHandler .- 官网示例: googlearchive/android-Camera2Basic
- 关于Camera的最新完整例子: android/camera-samples
- 关于android的activity中camera预览问题,涉及activity生命周期
- 打开摄像头的时间可能会很长,勿在主线程直接打开,否则会有概率出ANR
- 摄像头根据设备的不同可能在打开时经常会抛各种异常,记得try,catch
activity pause过后恢复我们以前是这样做的,Camera对象需要重新生成. 在onPause的时候,调用如下方法. public void stopPreview() { synchronized (mCameraLock) { if (mCamera != null) { mCamera.setPreviewCallback(null); mCamera.stopPreview(); mCamera.release(); mCamera = null; } } } 然后在onResume时,重新获得Camera对象(通过Camera.open()), 再重新设置previewCallback,SurfaceHolder,Parameters等,最后startPreview. 这里可以提醒一下LZ, **打开摄像头的时间可能会很长,勿在主线程直接打开,否则会有概率出ANR** **摄像头根据设备的不同可能在打开时经常会抛各种异常,记得try,catch**