Android Camera.release()在Nexus 10中释放摄像头需要30秒。有没有办法加快这个过程?
我正在使用以下代码在onPause中释放摄影机。但是,在Nexus10设备中,mCamera.release()一行平均需要30秒才能释放摄像头。我在mCamera.release()之前和之后添加了日志记录,发现打印这些日志的时间差为30秒Android Camera.release()在Nexus 10中释放摄像头需要30秒。有没有办法加快这个过程?,android,android-camera,nexus-10,google-nexus,Android,Android Camera,Nexus 10,Google Nexus,我正在使用以下代码在onPause中释放摄影机。但是,在Nexus10设备中,mCamera.release()一行平均需要30秒才能释放摄像头。我在mCamera.release()之前和之后添加了日志记录,发现打印这些日志的时间差为30秒 private void releaseCamera() { if (mCamera != null) { previewing = false; mCamera.setPreviewCallback(null);
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;
}
}
在调用releaseCamera()之前,我正在调用mCamera.stopReview()
有没有什么方法可以异步完成?因为从Camerapreview活动到下一个活动只需不到一分钟的时间
Edit1:我们将预览大小从最高(1080x1920)减小到中等范围(480x800),一切都开始正常工作。预览大小是否与HAL中的相机释放有关?您可以尝试在线程内释放相机作为解决方法,尽管这不是理想的解决方案。您可以在后台执行release函数时启动下一个活动
new AsyncTask() {
@Override
protected Object doInBackground(Object... params) {
releaseCamera();
return null;
};
}.execute();
迪利普,这是Nexus10中的已知问题,检查这个 我们试过这些东西
camera.stopPreview();
camera.setPreviewCallback(空);
摄像头解锁();
相机。释放();
摄像机=零代码>我不需要声誉级别来添加评论,因此我将把它放在这里:
new Thread(new Runnable(){
public void run(){
camera.stopPreview();
camera.setPreviewCallback(null);
camera.unlock();
camera.release();
camera = null;
}
}).start()
当释放调用将在单独的线程中运行时,它将导致使用摄像头的其他应用程序出现问题,并将在此基础上启动。
我也在寻找解决办法。我没有Nexus10。我们有自己的设备。我正在我的应用程序中创建许多线程。这是问题的根源吗?如果是这样的话,我怎样才能在不扎根设备的情况下检查呢?将预览大小从(10801920)减小到一些较小的大小,如(480800),性能会有一些显著的变化。Camera.release()是否与预览大小有关?如果释放摄像头时出现延迟,所用的时间几乎是一个常数——Nexus 10为320毫秒或30秒——其背后的原因是什么?您是否正在调用mCamera.stopPreview()
?您是否在其他应用程序中看到类似问题?Grafika()有一些基于摄像头的活动,例如“show+capture camera”,我定期在Nexus 10上运行它。您是从onPause()调用此命令的吗?在这段时间内,logcat中是否有与摄像头相关的内容?如果您查看Camera2 API()的代码,第284行,就会看到应用程序中出现的堆栈跟踪错误。似乎HAL正在等待相机上的所有操作完成,然后再关闭它,并且有什么东西阻止了你的释放。在释放超时时(我猜是30秒),HAL断开连接。这段代码中有一行有趣的代码://TODO:设置来自HAL的通知,而不是在这里睡觉。这可能是Nexus10上未实现的解决方案…我们使用该解决方案。然而,如果相机需要再次打开,这并不理想,用户将无法这样做。建议在Nexus10上不起作用。我们正在寻找一个可行的解决方案或解决办法。@ssasa我们发现,如果您没有正确打开和关闭nexus,这些错误正在发生,过了一段时间,它就成了一个问题。这就是原因,我提供了用于正确关闭相机的脚本,另外,为了解决这个问题,我们本周将实现camera 2 API。也许,到本周末我可以对此发表一些评论。