应用程序挂在camera.release() [英] app hanging on camera.release()

查看:163
本文介绍了应用程序挂在camera.release()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用相机闪光灯手电筒的应用程序。这似乎很好地工作,但有时调用camera.release()导致大约一分钟左右挂起。我已经包括下面的code。我看着一大堆例子,我没有看到任何可能导致这样的事情。任何想法?

  //最新
    公共无效塞顿(布尔,上下文的背景下){    如果(锁定){
        Log.i(TAG,锁:真);
        返回;
    }
    如果(上){
        如果(mCamera == NULL){
            mCamera = Camera.open();
        }        参数PARAMS = mCamera.getParameters();
        params.setFlashMode(MODE_TORCH);
        mCamera.setParameters(PARAMS);
        mCamera.start preVIEW();
    }其他{
        如果(mCamera!= NULL){
            尝试{
                参数PARAMS = mCamera.getParameters();
                params.setFlashMode(MODE_OFF);
                mCamera.setParameters(PARAMS);
            } {最后
                新主题(新的Runnable接口(){
                    公共无效的run(){
                        Log.i(TAG,新主题 - 开始);
                        锁定= TRUE;
                        mCamera.set previewCallback(NULL);
                        mCamera.stop preVIEW();
                        mCamera.release();
                        mCamera = NULL;
                        锁定= FALSE;
                        Log.i(TAG,新主题 - 结束);
                    }
                })。开始();
            }
        }
    }
}
//原版的
公共无效塞顿(布尔,上下文的背景下){
    摄像头摄像头= mCamera;
    如果(上){
        如果(相机== NULL){
            mCamera =相机= Camera.open();
        }        参数PARAMS = camera.getParameters();
        params.setFlashMode(MODE_TORCH);
        camera.setParameters(PARAMS);
        camera.start preVIEW();
    }其他{
        如果(相机!= NULL){            尝试{
                参数PARAMS = camera.getParameters();
                params.setFlashMode(MODE_OFF);
                camera.setParameters(PARAMS);
            } {最后
                camera.stop preVIEW();
                camera.release();
                mCamera =相机= NULL;
            }
        }
    }
}


解决方案

尝试把它在一个线程在后台运行,所以它不会挂断了UI。

 新主题(新的Runnable(){
    公共无效的run(){
        camera.set previewCallback(NULL); // previewCallback de_init。
        camera.stop preVIEW(); //停止preVIEW
        camera.release();
    }
})。开始();

I'm working on a flashlight app using the camera flash. It seems to work fine but on occasion calling camera.release() causes a hang for about a minute or so. I've included the code below. I've looked at a bunch of examples and I don't see anything that could cause such a thing. Any ideas?

    //latest
    public void setOn(boolean on, Context context) {    

    if (lock) {
        Log.i(TAG, "lock: true");
        return;
    }


    if (on) {           
        if (mCamera == null) {
            mCamera = Camera.open();
        }

        Parameters params = mCamera.getParameters();
        params.setFlashMode(MODE_TORCH);
        mCamera.setParameters(params);
        mCamera.startPreview();
    } else {
        if (mCamera != null) {              
            try {                   
                Parameters params = mCamera.getParameters();
                params.setFlashMode(MODE_OFF);
                mCamera.setParameters(params);                  
            } finally {
                new Thread(new Runnable() {
                    public void run() {
                        Log.i(TAG, "new Thread - start");
                        lock = true;
                        mCamera.setPreviewCallback(null);
                        mCamera.stopPreview();
                        mCamera.release();
                        mCamera = null;
                        lock = false;
                        Log.i(TAG, "new Thread - end");
                    }
                }).start();                                     
            }
        }
    }
}


//original
public void setOn(boolean on, Context context) {        
    Camera camera = mCamera;
    if (on) {           
        if (camera == null) {
            mCamera = camera = Camera.open();
        }

        Parameters params = camera.getParameters();
        params.setFlashMode(MODE_TORCH);
        camera.setParameters(params);
        camera.startPreview();
    } else {
        if (camera != null) {

            try {                   
                Parameters params = camera.getParameters();
                params.setFlashMode(MODE_OFF);
                camera.setParameters(params);                   
            } finally {
                camera.stopPreview();
                camera.release();
                mCamera = camera = null;
            }
        }
    }
}

解决方案

Try putting it in a thread to run in the background so it wont hang up the UI.

new Thread(new Runnable(){
    public void run(){
        camera.setPreviewCallback(null); // PreviewCallback de_init.
        camera.stopPreview(); // stop Preview
        camera.release();
    }
}).start();

这篇关于应用程序挂在camera.release()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆