Служба создает новый экземпляр медиаплеера

У меня проблема с сервисом.

В методе onCreate я создаю медиаплеер. Когда я перемещаюсь между действиями, я могу получить доступ к сервису плавно, и он поддерживает один и тот же экземпляр медиаплеера. Хотя, когда я оставляю приложение (аудио со службы mediaplayer все еще играет), а затем я возвращаюсь к приложению – я получаю новый экземпляр MediaPlayer. Звуковой поток из предыдущего экземпляра все еще воспроизводится.

Я хотел бы иметь доступ к тому же экземпляру MediaPlayer, что и для манипуляции воспроизводящей песней (например, пауза).

Знаете ли вы, что может быть проблемой?

class PlayerService : Service(), MediaPlayer.OnPreparedListener, PlayerServiceContract.ServiceContract { private val mBinder = PlayerBinder() private var mPlayer: MediaPlayer? = null private var mPresenter: PlayerServiceContract.Presenter? = null private var mRecording: Recording? = null override fun onCreate() { super.onCreate() mPlayer = MediaPlayer() mPlayer?.setWakeMode(applicationContext, PowerManager.PARTIAL_WAKE_LOCK) mPlayer?.setAudioStreamType(AudioManager.STREAM_MUSIC) mPlayer?.setOnPreparedListener(this) 

Связанная служба будет отключена, если служба будет отключена для всех своих привязок.
Служба, запущенная startService() будет отключена, если служба отключится, вызвав stopSelf() или stopService() .

Служба, которая вызывается startService() и bindService() будет уничтожена, если AND stopSelf () или stopService() .

Услуга может быть запущена и связана с ней. В таком случае система будет поддерживать работу службы до тех пор, пока она запущена или есть одно или несколько подключений к ней с помощью флага Context.BIND_AUTO_CREATE. Когда ни одна из этих ситуаций не выполняется, вызывается метод onDestroy () службы, и служба фактически прекращается. Вся очистка (остановка нитей, незарегистрированные приемники) должна быть завершена по возвращении из onDestroy ().
– От Service.Service Lifecycle | Разработчик Android Doc

В вашем случае, когда действия исчезли, служба, кажется, входит в состояние несвязанного состояния и может быть уничтожена.
Возможно, вам нужно вызвать startService() в той же службе при запуске игры и вызвать stopSelf() когда вы остановите игру, чтобы служба не могла быть уничтожена во время воспроизведения медиа.

ПРИМЕЧАНИЕ. Некоторые говорят, что вы должны вызвать stopSelf() после вскрытия всех. Некоторые говорят, что порядок остановки и развязывания не имеет значения. Я не знаю, что правильно.