Должен ли MediaPlayer работать в отдельном потоке?

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

Мой код основан на этом примере: http://developer.android.com/guide/topics/media/mediaplayer.html

В этом примере ничего не пронизывается, кроме вызова prepareAsync (). Меня смущает то, что когда я читаю о классе службы, я нахожу эту информацию:

«Внимание: служба работает в основном потоке своего хостинга – служба не создает свой собственный поток и не запускается в отдельном процессе (если вы не указали иначе). Это означает, что если ваша служба будет делать какие-либо действия Процессы интенсивной работы или блокировки CPU (например, воспроизведение MP3 или сетевое взаимодействие), вы должны создать новый поток в службе для выполнения этой работы. Используя отдельный поток, вы уменьшите риск ошибок приложения, не отвечающих (ANR), и Основной поток приложения может оставаться посвященным взаимодействию пользователя с вашими действиями ».

Причина, по которой я спрашиваю, заключается в том, что приложение несколько раз (обычно при прекращении соединения) задерживает пользовательский интерфейс при потоковой передаче звука. Я полностью понимаю, что пользовательский интерфейс зависает, если служба делает интенсивную работу ЦП, поскольку активность и служба работают в одном потоке. Но должен ли я ожидать, что MediaPlayer будет настолько интенсивным? То есть, должен ли он работать на отдельном потоке?

Solutions Collecting From Web of "Должен ли MediaPlayer работать в отдельном потоке?"

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

Может ли потоковая музыка остановить основной поток, пока музыка не закончит потоковое вещание? Это может быть причиной того, что он замедляет его.

Я не эксперт и в настоящее время изучаю себя, но об этом стоит подумать.

Нет, если вы делаете какую-либо сетевую передачу, вы должны сохранить это в потоке, медиапланер не является ресурсоемким. Держите его в своей деятельности.