欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Camera is being used after Camera.release() was called

程序员文章站 2022-06-15 13:56:19
...
 @Override
    protected void onDestroy() {
        super.onDestroy();
        if (camera!=null){
            camera.stopPreview();
            camera.release();
            camera = null;
        }
    }

报错原因 :

   回调onDestroy()的时候,PreviewCallback接口onPreviewFrame方法还在不停调用,
   具体调用频率就是当前预览的FrameRate,当onDestroy()执行完camera.release()时,
   onPreviewFrame再次被调用时就出现了该异常。

解决办法:

   if (camera!=null){
            camera.stopPreview();
            camera.setPreviewCallback(null);
            camera.release();
            camera = null;
        }

在onDestroy()里面调用camera.release()之前,先调用一次camera.setPreviewCallback(null); ,这样在执行完camera.release(),因为指定的PreviewCallback为null,因而就不会再调用onPreviewFrame,进而也不会再引用到camera和调用到其任何方法。

注:

onPreviewFrame第二个参数引用了camera。

应根据自己的release时机调用setPreviewCallback(null),例子是在OnDestroy中调用。