Во-первых, если вам действительно не нужно делать вызовы к этой службе между процессами (то есть из других .apks, или вы используете Android: процесс, чтобы по какой-то причине разделить свой собственный .apk на несколько процессов), затем яочень рекомендую просто отказаться от помощи.Это больше сложности без выгоды.«Пример локального сервиса» в документации по сервису показывает, как это сделать: http://developer.android.com/reference/android/app/Service.html
Во-вторых, выполнение связывания одновременно со стартом является ярким свидетельством некоторого основного недостатка в проекте.Запуск службы и привязка к службе семантически очень различаются, поэтому будут выполняться в разных местах на основе этой различной семантики.То есть, если и то, и другое вообще сделано ... на самом деле это необычная ситуация, когда вы используете как start, так и bind с одним и тем же сервисом.
В реализации класса сервиса для воспроизведения музыки, он будет использовать start, когда он активно выполняет воспроизведение (поэтому его процесс не будет убит системой, когда пользователь больше не будет активно взаимодействовать с пользовательским интерфейсом приложения).Запуск службы, когда пользователь входит в пользовательский интерфейс, может вызвать проблемы, поскольку теперь состояние запуска / остановки службы не определено четко - его можно запустить либо потому, что он выполняет воспроизведение, либо потому, что пользователь вошел впользовательский интерфейс приложения, и теперь, когда подходящее время, чтобы остановить его?Это будет хлопотно.
Теперь, когда нужно отменить привязку - вам просто нужно убедиться, что вы всегда сопоставляете unbindService () с предыдущим bindService ().Из ваших фрагментов кода похоже, что вы делаете это, но есть странные вещи, такие как mBound, который никогда не устанавливается.На самом деле, если вы последовательно связываете в onStart () и отменяете привязку в onStop (), вам никогда не нужно иметь mBound, чтобы решить, отменять ли связывание, потому что onStop () всегда вызывается после onStart ().
Так что с кодом, который вы даете здесь, не похоже, что есть проблема.Если вы получаете исключения, тем не менее, очевидно, что это может быть в другом месте в вашем приложении.Чтобы помочь сузить проблему, вы можете использовать этот флаг при вызове bindService () для получения дополнительной информации в журнале при возникновении сбоя: http://developer.android.com/reference/android/content/Context.html#BIND_DEBUG_UNBIND