【发布时间】:2015-07-22 05:51:46
【问题描述】:
One of the official Google samples for the Camera2 API 遭受the same BufferQueue has been abandoned problem 的影响,如下所示:
具体来说,示例应用程序从片段的onPause() 调用closeCamera() 方法,其中closeCamera() 在CameraCaptureSession 上调用close(),然后在CameraDevice 上调用close(),然后是close()在ImageReader 上(用于实际拍照)。在CameraDevice 上的close() 之后,LogCat 中出现了几次上述BufferQueue has been abandoned 消息,尽管我只在某些 Android 5.1 硬件(Nexus 4 和 Nexus 7 2013)而不是其他硬件(Nexus 5)上收到消息和 Nexus 6)。
fadden 对此的评论是:
如果消费者端在进入 onPause() 之前关闭,则消息是预期的。
TextureView 的“消费者端”何时会被关闭,为什么?
Google 的示例代码并没有主动做任何事情来关闭我可以看到的TextureView。而且,由于TextureView 在暂停时仍然可见,我预计“消费者端”在onPause() 时不会受到影响,但可能会在onStop() 之后受到影响。
虽然我意识到这条消息(尽管是一个错误)是良性的,但我正试图弄清楚如何摆脱它,如果没有其他原因,只是为了防止我一次又一次地被问到为什么我的代码正在记录此错误。我希望通过更多地了解这个“消费者方面”,我可以弄清楚当用户退出使用 Camera2 的活动或片段时如何更好地整理并避免此错误。
【问题讨论】:
-
可以子类化 TextureView 并调用 close() onDetachFromWindow 吗?
-
@Blackbelt:可能。我也不希望它在片段的
onPause()之前被调用。我会试一试,看看时机如何。感谢您的建议!
标签: android android-camera textureview