#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()
, иногда необходимо реализовать оба. Например, музыкальный проигрыватель может счесть полезным разрешить своей службе работать бесконечно, а также обеспечить привязку. Таким образом, действие может запустить службу для воспроизведения музыки, и музыка продолжает воспроизводиться, даже если пользователь покидает приложение. Затем, когда пользователь возвращается в приложение, действие может привязаться к службе, чтобы восстановить контроль над воспроизведением.