Должна ли фоновая музыка приложения иметь собственную нить?

Я пытаюсь создать приложение, в котором музыкальный фрагмент воспроизводится при каждом вызове onCreate(), и я хочу, чтобы эта музыка воспроизводилась во всем приложении, то есть во всех действиях. что я до сих пор делал, так это создавал Thread внутри OnCreate(), и я назвал его backgroundMusic, внутри него я создал объект MediaPlayer из музыкальной пьесы в моей папке Raw. учитывая, что сама музыка запускается только в течение минуты или около того, а среднее время, затрачиваемое на приложение, больше, я сделал цикл Loop, который, пока приложение работает, проверяет, играет ли музыка, если нет, то вызывает start();

backgroundMusic = new Thread(new Runnable() {
    @Override
    public void run() {
        while ( appIsRunning ){

            if( ! music.isPlaying () ){
                music.start();
            }
        }
    }
});backgroundMusic.start();

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

1 ответ

Решение

это подходящий способ воспроизведения фоновой музыки?

Нет, вам нужно объявить музыку на сервисе. Услуга:

  • Будет независим от активности LifeCycle, поэтому музыка будет продолжать играть, когда активность закрыта

  • может быть приостановлено при необходимости как входящий звонок

Вот кое-что, чтобы вы начали. Удачного кодирования!

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