Android: высвобождение ресурсов в onDestroy (); метод

1

Я понимаю, что система может убить активность, не вызывая onDestroy(). Скажем, у меня есть MediaPlayer, который работает, даже если он не отображается, я бы выпустил плеер в методе onDestroy().

Теперь, если система решает убить действие после вызова onPause() и никогда не вызывать onDestroy(), что это значит для моего MediaPlayer? Выйдет ли это когда-нибудь? Это большая проблема для камеры, поскольку я думаю, что для ее использования требуется освобождение для других действий.

Теги:

1 ответ

1
Лучший ответ

Очень редко бывает, что вы должны поддерживать воспроизведение медиафайлов из активности после onPause(). Вы, безусловно, должны освободить его, поскольку это создаст утечки. Вместо этого ваши медиа должны воспроизводиться в службе, у которой нет проблем onPause() (служба работает или нет), а затем ваши действия взаимодействуют с сервисом.

  • 0
    Да, использование услуги имеет смысл! но я просто пытался упростить его с помощью медиаплеера (хотя я не должен был догадываться). Лучший сценарий - это когда камера открывается для предварительного просмотра MediaRecorder в основной видео-активности и если вы хотите другую прозрачную активность поверх это с предварительным просмотром камеры, все еще видимым ниже. Я считаю, что фреймворк будет вызывать только OnPause (), а затем OnStop () на основной деятельности. Так что, если теперь фреймворк решит убить основное действие и пропустить onDestroy (), камера никогда не выйдет - это правильно? Есть ли обходной путь, чтобы гарантировать camera.release ()?
  • 1
    Ты прав. Камера должна быть отпущена при включенной паузе (). Есть причина. Если вы «контролируете», какие действия отображаются в верхней части вашего предварительного просмотра. Вы не можете контролировать, когда служба или, тем более, система вызывает другое действие из-за системного вещания, которому требуется камера или музыкальный сервис. В этой ситуации система очень злится на вас за то, что вы не отпустили камеру :) Вам следует избегать показа другого действия поверх предварительного просмотра камеры. Вместо этого используйте getWindowManager (). AddView (), чтобы добавить то, что выглядит как новое действие сверху.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню