我使用下面的代码在onPause中发布相机。但是,在Nexus 10设备中,mCamera.release()线平均需要30秒才能释放相机。我在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中的相机发布有任何关系吗?
发布于 2014-11-18 18:17:50
您可以尝试释放相机内的线程作为解决办法,虽然这不是一个理想的解决方案。当发布函数在后台执行时,您可以启动下一个活动。
new AsyncTask() {
@Override
protected Object doInBackground(Object... params) {
releaseCamera();
return null;
};
}.execute();发布于 2014-11-21 03:30:46
迪利普,它是知道问题在尼克斯10号,检查这个Nexus 10 camera.release hangs for 30 seconds。
我们试过这些东西,
camera.stopPreview();
camera.setPreviewCallback(null);
camera.unlock();
camera.release();
camera = null;
它为我工作,但我也必须在其他设备上测试同样的代码(把上面的代码放在try/catch语句中是很好的)。
此外,还可以在线程中添加此功能:
new Thread(new Runnable(){
public void run(){
camera.stopPreview();
camera.setPreviewCallback(null);
camera.unlock();
camera.release();
camera = null;
}
}).start();
尝试使用Camera2 API创建相机管理代码,希望这不会造成问题,请检查此http://blog.csdn.net/torvalbill/article/details/40376145。
发布于 2016-02-05 12:54:34
我不需要有多大的声誉来发表评论,所以我会在这里说:
new Thread(new Runnable(){
public void run(){
camera.stopPreview();
camera.setPreviewCallback(null);
camera.unlock();
camera.release();
camera = null;
}).start();
当发布调用将在单独的线程中运行时,它将给其他使用相机的应用程序带来问题,并在此基础上启动。我也在寻找解决办法。我没有Nexus10。我们有自己的设备。
https://stackoverflow.com/questions/21324390
复制相似问题