Страницы

Поиск по вопросам

четверг, 11 июля 2019 г.

MediaPlayer перестает работать в ViewPager при пролистывании

В фрагментах использую MediaPlayer для воспроизведения коротких аудио отрывков в формате .mp3, у меня 10 фрагментов, использую ViewPager для пролистывания, после 7-го фрагмента Medaplayer перестает воспроизводить аудио, кликаешь на кнопку и ничего не происходит. Ошибок ни каких не выдает, после закрытия и открытия снова начинает работать. В чем может быть проблема и как её решить?
Для воспроизведения использую код ниже:
final MediaPlayer voice = MediaPlayer.create(getActivity().getBaseContext(), R.raw.sound_1); Button play = (Button) view.findViewById(R.id.buttonReplay);
play.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { voice.start(); } });


Ответ

Дело в том, что в каждом новом фрагменте создаёте новый экземпляр плеера, а он обращается к общей для всех приложений системной службе, коя и начинает сбоить при слишком большом кол-ве запросов к ней. Чтобы решить эту проблему и освободить ресурсы плеера после его использования, необходимо вызвать метод OnCompletionListener и в нем вызывать функцию release(). Делать это можно по событию окончания проигрывания к-л файла.
play.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MediaPlayer voice = MediaPlayer.create(getActivity().getBaseContext(), R.raw.sound_1); voice.start(); voice.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer voice) { voice.release(); } }); } });

Комментариев нет:

Отправить комментарий