Почему служба запускается как с startService, так и с bindService в Android Studio?

#android #android-service

#java #Android #android-сервис

Вопрос:

Следующий код взят из проекта.

На мой взгляд, служба запускается с использованием либо startService или bindService .

Но следующий код использует оба startService и bindService , почему?

 public class RecordViewModel extends AndroidViewModel {

    public void connectService(Intent intent) {
        getApplication().startService(intent);
        getApplication().bindService(intent, serviceConnection, BIND_AUTO_CREATE);
    }
    
    ...
}
   

public class RecordingService extends Service {

    public class LocalBinder extends Binder {
        public RecordingService getService() {
            return RecordingService.this;
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        return myBinder;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        onStartCommandCalls  ;
        return START_NOT_STICKY;
    }

    ...
}
  

Ответ №1:

Вот некоторое описание, почему startService и bindService может использоваться вместе:

https://developer.android.com/guide/components/bound-services#bind-started-service

В нем говорится:

Как обсуждалось в документе Services, вы можете создать службу, которая одновременно запускается и привязывается. То есть вы можете запустить службу путем вызова startService() , что позволяет службе работать бесконечно, и вы также можете разрешить клиенту привязываться к службе путем вызова bindService() .

После этого:

Хотя вы обычно реализуете либо onBind() или onStartCommand() , иногда необходимо реализовать оба. Например, музыкальный проигрыватель может счесть полезным разрешить своей службе работать бесконечно, а также обеспечить привязку. Таким образом, действие может запустить службу для воспроизведения музыки, и музыка продолжает воспроизводиться, даже если пользователь покидает приложение. Затем, когда пользователь возвращается в приложение, действие может привязаться к службе, чтобы восстановить контроль над воспроизведением.