【问题标题】:ImageReader maxImages (2) has already been acquired in background taskImageReader maxImages (2) 已在后台任务中获取
【发布时间】:2018-11-09 17:34:48
【问题描述】:

我将 ImageReader 与 Handler 一起使用,以便在后台获取图像。 但我得到了:

致命异常:java.lang.IllegalStateException maxImages (2) 已获取,请在获取更多之前调用#close。

 private final ImageReader.OnImageAvailableListener mOnImageAvailableListener
        = new ImageReader.OnImageAvailableListener() {

    @Override
    public void onImageAvailable(ImageReader reader) {
        mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), CameraFragment.this));
    }

};

我的后台任务是:

    private static class ImageSaver implements Runnable {

    /**
     * The JPEG image
     */
    private final Image mImage;

    BaseCameraFragment cameraFragmentContext;

    public ImageSaver(Image image, BaseCameraFragment cameraFragmentContext) {
        mImage = image;
        this.cameraFragmentContext = cameraFragmentContext;
    }

    @Override
    public void run() {
        ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
        cameraFragmentContext.photoReady(new ByteBufferInputStream(buffer));
        mImage.close();
    }

}

我该如何解决这个问题?

【问题讨论】:

  • 你解决了吗?
  • 嘿,你找到解决办法了吗

标签: java android


【解决方案1】:

`

private ImageReader.OnImageAvailableListener imageAvailableListener = new ImageReader.OnImageAvailableListener()
{
    @Override
    public void onImageAvailable(ImageReader reader) {
        Image img = mReader.acquireLatestImage();

        //mReader.close();
       img.close();
    }
};

`

img.close();就可以解决

【讨论】:

  • 这实际上并不能解决问题。该错误实际上只在极少数设备中弹出,但 img.close() 在之前相机工作正常的手机中会出现问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
相关资源
最近更新 更多