Зачем в таких случаях помещать код проигрывания в сервис, а не в какой-нибудь синглтон?
Чаще всего это делается для переиспользования уже готовой логики плеера. Пишут сервис и привязывают плеер к его жизненному циклу сервиса (таким образом этот синглтон с плеером не будет висеть в памяти пока живо приложение). А дальше дело техники - мы можем использовать сервис просто для проигрывания в приложении и при выходе из приложения сервис тоже гасить. Но при этом, даже на лету, мы можем переключить сервис в режим фонового проигрывания и вывести нотификацию в шторку без пересоздания инстанса плеера. Ну и с синглтоном никто не отменяем проблему с двумя плеерами - иногда надо играть несколько типов контента одновременно.
К примеру, так сделано в платном YouTube. Когда ты в приложении у тебя нет никаких нотификаций в шторке, но как только ты сворачиваешь приложение, проигрывание продолжается без остановок и в шторку сервис уже выводит себя как текущее воспроизведение.
Ну и сервисы выгружаются уже когда совсем беда по памяти на устройстве (т.е. приложение с foreground сервисом имеет меньший приоритет для выгрузки из памяти, чем другие "простые" приложения), когда Ваш singleton может быть выгружен в любой момент при свернутом приложении. Система таким образом распределяет ресурсы. Т.е. использовать плеер напрямую в приложении (пусть даже singleton) целесообразно только если в фоне Вам проигрывание вообще не нужно.