One of the official Google samples for the Camera2 API страдает от the same BufferQueue has been abandoned
problem как видно на:Когда «Потребительская сторона» TextureView закрыта?
В частности, пример приложения называет closeCamera()
метод из onPause()
фрагмента, где closeCamera()
вызовы close()
на CameraCaptureSession
, затем close()
на CameraDevice
, затем close()
на ImageReader
(используется для фактической съемки). После close()
на CameraDevice
, когда в LogCat появляется несколько вхождений вышеупомянутого сообщения BufferQueue has been abandoned
, хотя я получаю сообщение только на некоторых устройствах Android 5.1 (Nexus 4 и Nexus 7 2013), а не на других (Nexus 5 и Nexus 6). Комментарий
Фадден на это:
Если сторона потребитель закрыли перед входом OnPause(), сообщения можно было бы ожидать.
Когда TextureView
«потребительская сторона» будет закрыта, и почему тогда?
Образец кода Google не проактивно ничего не делает, чтобы закрыть TextureView
, что я вижу. И, поскольку TextureView
все еще может быть видимым при паузе, я бы ожидал, что «потребительская сторона» не будет затронута во время onPause()
, но, возможно, позже в onStop()
.
Хотя я понимаю, что это сообщение (несмотря на то, что оно является ошибкой) является доброкачественным, я пытаюсь выяснить, как избавиться от него, если не по какой-либо другой причине, кроме как предотвратить мое время от времени и снова, почему код моя регистрирует эту ошибку. Я надеюсь, что, понимая больше об этой «стороне потребителя», я могу понять, как лучше убирать вещи, когда пользователь выходит из действия или фрагмента, использующего Camera2, и избегает этой ошибки.
может быть подклассификация TextureView и вызов close() onDetachFromWindow - опция? – Blackbelt
@Blackbelt: Возможно. Я бы не ожидал, что он будет вызываться до 'onPause()' фрагмента. Я дам ему шанс и посмотрю, что такое время. Спасибо за предложение! – CommonsWare