2016-03-25 3 views
2

Я начал службу переднего плана с идентификатором уведомления, однако, когда я пытаюсь позвонить stopForeground(false), служба перезапускается. Но в соответствии с документами android, вызывающими этот метод, это не останавливает службу.вызов stopForeground приводит к перезапуску текущей службы

@Override 
    public void onCreate() { 
     LogHelper.d(TAG, "onCreate"); 
     super.onCreate(); 
     initMediaSeesion(); 
    } 

@Override 
    public int onStartCommand(Intent startIntent, int flags, int startId) { 
     LogHelper.d(TAG, "onStartCommand"); 
     MediaButtonReceiver.handleIntent(mSession, startIntent); 
     return START_STICKY; 
    } 

    public void startNotification() { 
      if (!mStarted) { 
       Notification notification = createNotification(); 
       if (notification != null) { 
        mService.startForeground(NOTIFICATION_ID, notification); 
        mStarted = true; 
       } 
      } 
     } 

    @Override 
     public void pause() { 
      LogHelper.d(TAG, "Calling stopForeground false"); 
      giveUpAudioFocus(); 
      mService.stopForeground(false); 
    } 

Журналы:

03-25 08:50:40.200 19564-19564/? D/MusicService: Calling stopForeground false 
03-25 08:50:40.352 19564-19564/? D/MusicService: onCreate 
03-25 08:50:40.475 19564-19564/? D/MusicService: onStartCommand 
03-25 08:50:40.476 19564-19564/? D/MusicService: onStartCommand 

ответ

1

Потому что вы установили START_STICKY при остановке службы автоматически перезапускать.

Это то, что говорит Android DOC

Для запуска служб, есть два дополнительные основной режим работы они могут решить работать в зависимости от значения они возвращаются из onStartCommand(): START_STICKY используется для сервисы, которые явно запускаются и останавливаются по мере необходимости, тогда как START_NOT_STICKY или START_REDELIVER_INTENT используются для служб, которые должны работать только при обработке любых переданных им команд. Дополнительную информацию о семантике см. В связанной документации.

Попробуйте использовать stopSelf();