Android 当BufferQueue被放弃时,我可以做什么?

Android 当BufferQueue被放弃时,我可以做什么?,android,android-camera,surfaceview,textureview,Android,Android Camera,Surfaceview,Textureview,我在android应用程序中使用纹理视图显示相机预览。然而,我注意到,每次我的应用程序暂停时,我都会出现以下错误: 03-18 18:23:44.315: W/BufferQueue(19582): [unnamed-19582-20] cancelBuffer: BufferQueue has been abandoned! 有人能告诉我这是怎么回事吗?当我的应用程序暂停时,我所做的就是从surfacetexturedemployed()上取消初始化所有类似的内容 你所做的基本上是写在中的,

我在android应用程序中使用纹理视图显示相机预览。然而,我注意到,每次我的应用程序暂停时,我都会出现以下错误:

03-18 18:23:44.315: W/BufferQueue(19582): [unnamed-19582-20] cancelBuffer: BufferQueue has been abandoned!
有人能告诉我这是怎么回事吗?当我的应用程序暂停时,我所做的就是从surfacetexturedemployed()上取消初始化所有类似的内容


你所做的基本上是写在中的,所以它应该是有效的

错误消息表示
BufferQueue
(相机)的“生产者”端抓取了一个缓冲区,现在正试图取消抓取(通过
cancelBuffer()
)。然而,“消费者”方面(SurfaceTexture)已经消失了。因为“消费者”方拥有队列,所以
BufferQueue
被视为已放弃,不可能进行进一步的操作

这听起来像是一个时间问题——制作人试图在
SurfaceTexture
被销毁后进行操作。这是没有意义的,因为您正在
onSurfaceTextureDestroyed()
中关闭生产者,并且ST不会被释放,除非并且直到回调返回
true
。(在回调方法的开始和结束处添加日志消息可能很有意思,并查看“放弃”投诉是在它们之前还是之后发生的。使用
logcat-v threadtime
查看线程ID。)

所以我不确定为什么会发生这种情况。好消息是,它不应该对您的应用程序产生负面影响——生产者将正确地确定消费者已经离开,并且会抱怨,但不会崩溃。所以它很吵,但不爆炸

出于好奇,如果您在中运行“Live camera(TextureView)”,是否会从设备上看到类似的消息?该活动直接来自
TextureView
文档,在我的设备上运行时,我没有看到任何抱怨


(可以找到有关SurfaceTexture和BufferQueue的其他信息。)

这真的很有帮助!我还找到了问题的原因:保存相机预览的纹理视图从布局中删除(通过调用
removeView()
)的方式提前删除。这一切的底线是:当你遇到这条消息时,确保你的预览在你的相机拍摄/停止相机未被调用的时间内处于活动状态。播放视频时如何解决这个问题@法登5年了,你帮了我!我在我的google camera mod APK中遇到了这个错误,每次都是在拍摄HDR增强型照片后发生的,这是通过编辑smali文件进行排序。我如何在修改过的google cam APK中解决这个问题
 public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
    mCamera.setPreviewCallback(null);
    mCamera.stopPreview();
    mCamera.release();
    return true;
}