Android останавливает поток от MediaPlayer

Я использую MediaPlayer для воспроизведения радиопотока. Проблема возникает, когда я выполняю фоновое задание, которое воспроизводит поток.

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

Вот как я готовлю медиаплеер при запуске:

radioPlayer=new MediaPlayer();
radioPlayer.setDataSource(streamLocation); //with a try/catch of course in the full code
radioPlayer.prepareAsync();
radioPlayer.seekTo(0);
radioPlayer.setOnInfoListener(this);
radioPlayer.setOnPreparedListener(new OnPreparedListener(){                 
public void onPrepared(MediaPlayer mp) 
        radioPlayer.start();
});

Это все работает в главном потоке.

2 ответа

Решение

Попробуйте запустить медиаплеер как службу, а не внутри действия. Таким образом, когда ваше приложение переходит в режим ожидания, вы можете воспроизводить медиаплеер в фоновом режиме. Когда пользователь перестает фокусироваться на приложении (например, при поступлении телефонного звонка), действие приостанавливается или уничтожается. Однако службы предназначены для работы в фоновом режиме вместе со всем, что работает в ОС Android.

Сервисы

Сервис - это компонент приложения, который может выполнять длительные операции в фоновом режиме и не предоставляет пользовательский интерфейс. Другой компонент приложения может запустить службу, и он будет продолжать работать в фоновом режиме, даже если пользователь переключается на другое приложение. Кроме того, компонент может связываться со службой, взаимодействовать с ней и даже выполнять межпроцессное взаимодействие (IPC). Например, сервис может обрабатывать сетевые транзакции, воспроизводить музыку, выполнять файловый ввод-вывод или взаимодействовать с поставщиком контента, все из фонового состояния.

Погрузись вглубь

Другие вопросы по тегам