2010-11-23 2 views
7

Если я правильно ее понимаю, bindService() с BIND_AUTO_CREATE запустит сервис и не умрет, пока все привязки не будут откреплены.Android: Служба останавливается, когда активность закрыта

Но если я свяжусь с сервисом (BIND_AUTO_CREATE) на кнопке onCreate() и нажмите кнопку возврата, чтобы закрыть операцию , служба вызывает onDestroy() и также умирает.

Я не называю unbind() в любое время. Значит, это означает, что когда действие было уничтожено, привязка также была уничтожена и служба также уничтожена?

Что делать, если я хочу, чтобы служба всегда работала, в то же время, когда начинается действие Я хочу связать его, чтобы получить доступ к сервису?

Если я вызываю StartService(), а затем bindService() на onCreate(), он перезапустит службу при каждом запуске Activity. (Который я не хочу).

Итак, я мог бы запустить сервис один раз, а затем связать в следующий раз, когда я запустил действие?

ответ

9

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

startService будет следить за тем, чтобы служба работала, даже если ваша деятельность уничтожена (если она не остановлена ​​из-за ограничений памяти). Когда вы вызываете startService, в сервисе вызывается метод onStart. Он не перезапускает (завершает и не запускает снова) службу. Это зависит от того, как вы реализуете метод onStart в Сервисе. Тем не менее,Службы вызывается только один раз, поэтому вы можете инициализировать там вещи.

+2

Как я могу связаться с сервисом из своей деятельности? Скажем, я хочу отправить уведомления из службы в эту деятельность, когда будет выполнена какая-либо работа. Служба выполняет некоторую работу периодически. – giga 2012-07-20 04:37:33

+0

Я вызываю bindService() с BIND_AUTO_CREATE: служба останавливается, когда действие закрыто; Я вызываю startService(), это нормально. спасибо. – songhir 2014-03-23 04:20:43

-5

вы можете сделать это с помощью BroadcastReceivers. вы найдете много на Google, как их использовать

4

Я нашел решение!

Проблема заключается в том, что когда вы закрываете свою деятельность, и ваша служба не настроена как служба переднего плана, система Android распознает ее как неиспользуемую и закрывает.

вот пример, когда я добавил уведомления:

void setUpAsForeground(String text) { 
    PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0, 
      new Intent(getApplicationContext(), MainActivity.class), 
      PendingIntent.FLAG_UPDATE_CURRENT); 
    mNotification = new Notification(); 
    mNotification.tickerText = text; 
    mNotification.icon = R.drawable.muplayer; 
    mNotification.flags |= Notification.FLAG_ONGOING_EVENT; 
    mNotification.setLatestEventInfo(getApplicationContext(), "MusicPlayer", 
      text, pi); 
    startForeground(NOTIFICATION_ID, mNotification); 

} 

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

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