В фрагментах использую 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();
}
});
}
});
Комментариев нет:
Отправить комментарий