Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Camera.release()在Nexus 10中释放摄像头需要30秒。有没有办法加快这个过程?_Android_Android Camera_Nexus 10_Google Nexus - Fatal编程技术网

Android Camera.release()在Nexus 10中释放摄像头需要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);

我正在使用以下代码在onPause中释放摄影机。但是,在Nexus10设备中,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;
    }
}
在调用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。也许,到本周末我可以对此发表一些评论。