调用stopForeground会导致重新启动当前服务

时间:2016-03-25 03:32:39

标签: android android-service android-mediaplayer

我启动了一个带有通知ID的前台服务,但是当我尝试呼叫stopForeground(false)时,服务重新启动。但根据android文档调用此方法并不会停止服务。

@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 个答案:

答案 0 :(得分:1)

因为您在停止服务时设置了START_STICKY,所以它会自动重启。

这就是Android DOC所说的

  

对于已启动的服务,他们可以决定运行另外两种主要操作模式,具体取决于它们从onStartCommand()返回的值:START_STICKY用于根据需要显式启动和停止的服务,而START_NOT_STICKY或START_REDELIVER_INTENT用于在处理发送给它们的任何命令时应保持运行的服务。有关语义的更多详细信息,请参阅链接的文档。

尝试使用stopSelf();