#java #android
Закрыт. Данный вопрос необходимо конкретизировать. Ответы на него в данный момент не принимаются. Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он был сосредоточен только на одной проблеме, отредактировав его. Закрыт 7 месяцев назад. Основной мой вопрос в том, что я хочу понять архитектуру подобного приложения. Какие классы и с каким отношением встроить. В игрушку собираюсь добавить фоновую музыку и естественно к такому плееру нужно иметь доступ из разных классов, например я в меню - играет один трэк, перешел в игровое поле - трэк другой или же из игрового поля иметь возможность приглушить фоновую музыку, а на первый план вывести звуки из игры , произошло игровое событие - воспроизвел другой звук ( в последнем случае, наверно нужно создавать второй экземпляр класса для воспроизведения и раз такие звуки привязаны к игровому полю, думаю достаточен один SoundPool используя композицию) Для класса MediaPlayer так и напрашивается использовать шаблон синглтон. Еще вопрос: учитывая, что в приложениях часто, и так же в моем случае, воспроизведение музыки должно прекращаться при сворачивании приложения, то нужен ли мне Service? Думаю что нет. В любом случае MediaPlayer должен находиться в доп. потоке, а значит нужен способ общения с этим потоком, как это всё правильно реализуется? И есть ли какие то связанные с темой воспроизведения музыки библиотеки?
Ответы
Ответ 1
Если нужно воспроизведение звука и в момент когда приложение свернуто, то нужно конечно использовать Service. Если пишем какой нибудь плеер используем класс MediaController, он обрабатывает обратные вызовы от аппаратных кнопок, от подключенной гарнитуры и так далее, в общем полный контроль над воспроизведением музыки. Вот хорошая статья на этот случай. В случае описываемом в вопросе, когда воспроизведение звука нужно только в открытом приложении и должно контролироваться из разных активностей, применяем шаблон синглтон. (Думаю не стоит искать решение лучше так как для этого шаблон одиночка и существует. Альтернативой было бы передавать из одной активности в другую экземпляр MediaPlayer и писать лишний код) Т.е. создаем класс в котором есть экземпляр MediaPlayer и обращаемся к нему из любой активности. Как реализовать шаблон одиночка в андроид есть тут , вот статья о правильной реализации этого шаблона в Java. А теперь насчет того в каком потоке с этим MediaPlayer работать. Само воспроизведение музыки процесс не ресурсоемкий, поэтому можно смело стартовать в главном потоке. А вот загрузка этого ресурса может занимать время. Если ресурс находится в самом приложении или это какой нибудь файл с флешки, то смело работаем в главном потоке, если это загрузка по сети или поток, то для нас у MediaPlayer есть метод prepareAsync(), который произведет подготовку ресурса в отдельном потоке, а по завершению вернет CallBack. В прочем вот разбор MediaPlayer Насчет библиотек: я ничего не искал, т.к. MediaPlayer это уже так сказать библиотека, в нем реализовано всё самое основное.Ответ 2
Ну а для простых звуков, если небольшой длительности, в игре лучше использовать класс AudioTrack, а файлы готовить в PCM формате. Будет быстрее реакция на действия в игре. А фоновую музыку использовать MediaPlayer.
Комментариев нет:
Отправить комментарий