Android: Как остановить службу, запускаемую bindService () с параметром BIND_AUTO_CREATE? - PullRequest
5 голосов
/ 18 ноября 2010

Я запускаю сервис, используя:

private ServiceConnection _serviceConnection = new ServiceConnection() {...}
bindService(new Intent(this, MainService.class), _serviceConnection, Context.BIND_AUTO_CREATE);

Я хочу перезапустить сервис. (Давайте не будем спорить, почему я хочу это сделать) Я делаю это:

unbindService(_serviceConnection);
// Do some initialization on service
bindService(new Intent(this, MainService.class), _serviceConnection, Context.BIND_AUTO_CREATE);

Я заметил, что служба не умирает (onDestroy не запускается), пока я не вызову next bindService (); Поэтому некоторая статическая инициализация, которую я сделал для службы, была очищена реализацией onDestroy ().

Вопрос: Как убедиться, что unbindService () остановит службу (запустите onDestory ()), чтобы я мог выполнить инициализацию после и перезапустить bindService ()?

Ответы [ 3 ]

4 голосов
/ 18 ноября 2010

Android сохраняет сервисы по своему усмотрению, даже после вызова unbindService или stopService.

Если вам нужно немедленно повторно инициализировать некоторые данные на стороне службы, вам, скорее всего, нужно предоставить метод обслуживания для этого.

4 голосов
/ 18 ноября 2010

Вопрос: Как вы убедитесь, что unbindService () остановит службу (запустите onDestory ()), чтобы я мог выполнить инициализацию после и перезапустить bindService ()?

Время onDestroy() после последнего unbindService() является неопределенным и, безусловно, асинхронным.Вы также можете попробовать позвонить stopService() самостоятельно, но это тоже асинхронно, поэтому вы не знаете, когда он будет остановлен.

Я не знаю надежного способа для вас "перезапустить" службуиспользуя шаблон привязки.

0 голосов
/ 04 октября 2014

Вы можете использовать onRebind (), если вы возвращаете true в onUnbind ().

см. Здесь: http://developer.android.com/guide/components/bound-services.html

...