首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Camera.release()需要30秒才能释放Nexus 10中的相机。有什么方法可以加速这个过程吗?

Camera.release()需要30秒才能释放Nexus 10中的相机。有什么方法可以加速这个过程吗?
EN

Stack Overflow用户
提问于 2014-01-24 04:19:52
回答 3查看 1.3K关注 0票数 12

我使用下面的代码在onPause中发布相机。但是,在Nexus 10设备中,mCamera.release()线平均需要30秒才能释放相机。我在mCamera.release()之前和之后添加了日志记录,发现打印这些日志的时间差是30秒。

代码语言:javascript
复制
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中的相机发布有任何关系吗?

EN

回答 3

Stack Overflow用户

发布于 2014-11-18 18:17:50

您可以尝试释放相机内的线程作为解决办法,虽然这不是一个理想的解决方案。当发布函数在后台执行时,您可以启动下一个活动。

代码语言:javascript
复制
   new AsyncTask() {

        @Override
        protected Object doInBackground(Object... params) {
            releaseCamera();
            return null;
        };
    }.execute();
票数 5
EN

Stack Overflow用户

发布于 2014-11-21 03:30:46

迪利普,它是知道问题在尼克斯10号,检查这个Nexus 10 camera.release hangs for 30 seconds

我们试过这些东西,

代码语言:javascript
复制
camera.stopPreview();
camera.setPreviewCallback(null);
camera.unlock();
camera.release();
camera = null;

它为我工作,但我也必须在其他设备上测试同样的代码(把上面的代码放在try/catch语句中是很好的)。

此外,还可以在线程中添加此功能:

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2016-02-05 12:54:34

我不需要有多大的声誉来发表评论,所以我会在这里说:

代码语言:javascript
复制
new Thread(new Runnable(){
public void run(){
    camera.stopPreview();
camera.setPreviewCallback(null);
camera.unlock();
camera.release();
camera = null;
}

).start();

当发布调用将在单独的线程中运行时,它将给其他使用相机的应用程序带来问题,并在此基础上启动。我也在寻找解决办法。我没有Nexus10。我们有自己的设备。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21324390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档