Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.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 正确释放用于Camera2重复请求的目标曲面_Android_Camera_Android Camera_Android Camera2 - Fatal编程技术网

Android 正确释放用于Camera2重复请求的目标曲面

Android 正确释放用于Camera2重复请求的目标曲面,android,camera,android-camera,android-camera2,Android,Camera,Android Camera,Android Camera2,假设我有CameraCaptureSession session1和Surface s1作为重复CaptureRequest的目标。现在我想更改输出大小。为此,我可以创建另一个具有适当大小的曲面s2,并创建另一个CameraCaptureSession session2。 现在我将使用s2作为未来CaptureRequests的目标,因此我不再需要s1。此外,我只想在发布s1之后创建s2,这样我就可以节省资源 确切地说,s1何时可以发布?我可以在session1.close()之后立即释放s1,

假设我有
CameraCaptureSession session1
Surface s1
作为重复
CaptureRequest
的目标。现在我想更改输出大小。为此,我可以创建另一个具有适当大小的
曲面s2
,并创建另一个
CameraCaptureSession session2
。 现在我将使用
s2
作为未来
CaptureRequests
的目标,因此我不再需要
s1
。此外,我只想在发布
s1
之后创建
s2
,这样我就可以节省资源

确切地说,
s1
何时可以发布?我可以在
session1.close()
之后立即释放
s1
,还是应该等到触发
onClosed(Session)
后才释放
s1



第二种方法听起来很正确,但我发现的
replaceSessionClose()
让我有点困惑。

最好等待onClosed,尽管在最坏的情况下,您会错过发送到旧会话的一到两个帧,并且如果您提前释放surface,在logcat中会有一些错误记录


但这不会导致创建新会话失败。

感谢您的回答我是否理解正确:我为早期发布支付的最高价格是丢失的帧和logcat消息,因此如果我对这些帧不感兴趣,那么在
会话后立即发布曲面是完全安全的。close()
并且不会发生运行时错误?如果您已将会话中最后一个请求的CaptureCallback#onCaptureFailed方法()与释放的曲面连接起来,则可能会调用该方法的某些实例,因为在无缓冲区可发送的情况下无法处理请求,但不应发生其他错误。