use*_*316 27 android surfaceview android-camera textureview
我正在使用纹理视图在我的Android应用程序中显示相机的预览.然而,我注意到,每次我的应用程序暂停时,我都会收到此错误:
03-18 18:23:44.315: W/BufferQueue(19582): [unnamed-19582-20] cancelBuffer: BufferQueue has been abandoned!
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这里发生了什么?当我的应用程序暂停时,我所做的就是从这里取消所有这些内容onSurfaceTextureDestroyed()
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
return true;
}
Run Code Online (Sandbox Code Playgroud)
fad*_*den 46
你正在做什么本质上是在TextureView文档中写的,所以它应该工作.
错误消息意味着BufferQueue
(摄像机)的"生产者"一侧抓住了一个缓冲区,现在正试图解除它(通过cancelBuffer()
).然而,"消费者"方面SurfaceTexture
已经消失了.因为"消费者"方拥有队列,所以BufferQueue
被认为是放弃了,并且不可能进一步操作.
这听起来只是一个时间问题 - 制作人试图在SurfaceTexture
被破坏后进行操作.这没有任何意义,因为你关闭了生产者onSurfaceTextureDestroyed()
,并且除非并且直到该回调返回,否则ST不会被释放true
.(在回调方法的开头和结尾添加日志消息可能会很有趣,并查看"放弃"投诉是否发生在它们之前或之后.logcat -v threadtime
用于查看线程ID.)
所以我不确定为什么会这样.好消息是它不应该对您的应用产生负面影响 - 生产者将正确地确定消费者已经离开,并且会抱怨而不是崩溃.所以它很吵,但没有爆炸.
出于好奇,如果您在Grafika中运行"Live camera(TextureView)",您是否会从设备中看到这样的消息?该活动直接来自TextureView
文档,当我在我的设备上运行它时,我没有看到任何抱怨.
(有关SurfaceTexture和BufferQueue的更多信息,请点击此处.)