2012-04-17 2 views
2

У меня есть приложение, состоящее из нескольких видов деятельности. Все действия должны иметь доступ к местной службе. Я хочу, чтобы сервис должен быть запущен, когда я запустить приложение, и останавливается, когдаAndroid Start/Stop a

а) App уничтожается (назад ключ)

б) приложение останавливается (домашний ключ)

с) Устройство находится в глубоком сне (ключ питания)

В принципе, служба не должна работать, когда нет видимой активности.

Я связываю службу во всех действиях в onResume() и отвязываю службу в каждом действии в onPause(). К сожалению, это воссоздает службу каждый раз, когда я переключаю действие, потому что служба становится несвязанной до того, как новая активность связывает ее.

Кто-нибудь теперь, как предотвратить это?

ответ

1

Предполагая, что вы являетесь связующим звеном с Context.BIND_AUTO_CREATE, то вы почти у цели. Свяжите службу в onStart() и отвяжите ее в onStop(). Вы должны обнаружить, что начало второго действия происходит до остановки первого, когда приложение переключается с первого на второе. Я использовал эту технику в своем приложении и записывал все методы on ..; они происходят в таком порядке, когда я включаю:

FIRST Activity onCreate 
FIRST Activity onStart 
FIRST Activity onResume 
FIRST Activity onPause 
SECOND Activity onCreate 
SECOND Activity onStart 
SECOND Activity onResume 
FIRST Activity onStop 

Так на короткое время два вида деятельности связаны с услугой, которая не делает никакого вреда вообще. Когда никакие действия не связаны, служба остановится.

+0

Большое спасибо, это именно то, что я искал! – osiris81

0

Посмотрите на this.

Однако, если вы решили реализовать onStartCommand() обратного вызова метод, то вы должны явно остановить службу, потому что служба теперь считается начало. В этом случае служба работает до , служба останавливается сама с stopSelf() или другим вызовом компонента stopService(), независимо от того, привязана ли она к каким-либо клиентам.

Смежные вопросы