我正在使用纹理视图在我的android应用中显示相机的预览。但是,我注意到的是,每当我的应用暂停时,都会出现此错误:
03-18 18:23:44.315: W/BufferQueue(19582): [unnamed-19582-20] cancelBuffer: BufferQueue has been abandoned!
有人可以告诉我这是怎么回事吗?当我的应用程序暂停时,我要做的就是从onSurfaceTextureDestroyed()
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
return true;
}
实际上,您正在执行的操作是TextureView文档中编写的内容,因此它应该可以工作。
该错误消息表示BufferQueue
(摄像机)的“生产者”侧已抓取一个缓冲区,现在正尝试(通过cancelBuffer()
)取消抓取。但是,“消费者”这一面SurfaceTexture
已经消失了。由于“消费者”一方拥有该队列,因此将BufferQueue
其视为已放弃,并且无法进行进一步的操作。
听起来这只是一个时间问题-生产者SurfaceTexture
在销毁销毁后试图进行操作。这没有意义,因为您要关闭生产者onSurfaceTextureDestroyed()
,并且除非并且直到该回调返回,否则ST不会被释放true
。(在回调方法的开始和结束处添加日志消息可能很有趣,并查看“遗弃”的投诉是在它们之前还是之后发生的。logcat -v threadtime
用于查看线程ID。)
所以我不太确定为什么会这样。好消息是,它不会对您的应用程序产生不利影响-生产者将正确确定消费者已经离开,并且会抱怨但不会崩溃。因此,它很嘈杂,但不令人发笑。
出于好奇,如果在Grafika中运行“实时摄像机(TextureView)”,您是否会从设备中看到类似的消息?该活动直接来自TextureView
文档,并且在我的设备上运行它时,我看不到任何抱怨。
(有关SurfaceTexture和BufferQueue的其他信息,可以在这里找到。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句