Я понимаю, что на этот вопрос уже был дан ответ. Но я думаю, что есть причина пойти на то, почему люди делают эту ошибку.
Проблема действительно связана с учебными документами. http://developer.android.com/reference/android/app/Service.html показывает правильную реализацию, а https://developer.android.com/guide/components/bound-services.html в «ActivityMessenger» показывает Очень НЕКОТОРЫЕ реализации.
В примере «ActivityMessenger» onStop () потенциально может быть вызван до того, как служба действительно была связана.
Причина этой путаницы в том, что они используют связанный сервис boolean, чтобы обозначать разные вещи в разных примерах. (в основном, bindService (), называемый OR, фактически связан с Сервисом)
В правильных примерах, где unbind () выполняется на основе значения связанного логического, связанное логическое значение указывает, что вызывалась функция bindService () . Так как это очередь на основном потоке, то ServiceConnection mConnection = новый ServiceConnection ) ( { @Override общественного аннулируются onServiceConnected ( ComponentName имя , IBinder сервис ) { mBinder = ( MyIBinder ) услуг ; } @Override общественных пустоты onServiceDisconnected ( Имя_компонент название ) { mBinder = NULL ; } }; ... public void doBindService () { bindService ( новый Intent ( это , MyService . class ), mConnection , Context . BIND_AUTO_CREATE ); mIsBound = true ; } public void doUnbindService () { if ( mIsBound ) { unbindService ( mConnection ); mIsBound = false ; } } должен быть вызван (таким образом, чтобы он выполнялся в очереди), независимо от того, когда (если когда-либо) происходит onServiceConnected ().
В других примерах, например, в http://developer.android.com/reference/android/app/Service.html . Граница указывает, что Сервисы фактически привязаны, так что вы можете использовать ее и не получить исключение NullPointerException. Обратите внимание, что в этом примере по-прежнему выполняется незарегистрированный вызов java.lang.IllegalArgumentException: Service, и связанное логическое значение не определяет, следует ли отменить привязку или нет .