2014-11-01 4 views
0

У меня есть служба android, которая предназначена всегда для работы в фоновом режиме, аналогично тому, что делает MessageService WhatsApp. Когда приложение запускается, оно гарантирует, что служба действительно запущена. Позже одна из активистов связывается с сервисом, чтобы использовать некоторые из его методов в дополнение к тому, что уже делает служба, а когда активность уничтожается - она ​​отталкивается от службы. Пока все хорошо, похоже, это сработало.Служба Android перезагружается после закрытия приложения

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

Любые намеки на то, что вызывает это и как его решить?

EDIT код, в соответствии с просьбой:

Соответствующая часть службы:

public static boolean isRunning = false; 
    ... 
    ... 
    @Override 
public int onStartCommand(final Intent intent, int flags, int startId) { 
    if (!isRunning) { 
     isRunning = true; 

     Thread thread = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       connect(intent.getIntExtra(Constants.ID, -1), 
         intent.getStringExtra(Constants.PASSWORD)); 
      } 
     }); 
     thread.start(); 
    } 
    return START_REDELIVER_INTENT; 
...... 
} 

Запуск службы, когда приложение начинает

 if (!ChatService.isRunning) { 
     Intent chatService = new Intent(this, ChatService.class); 
     chatService.putExtra(Constants.ID, LocalManager.getID()); 
     chatService.putExtra(Constants.PASSWORD, LocalManager.getPassword()); 
     startService(chatService); 
    } 

Привязка к службе в одна из видов деятельности

void bindService() { 
    bindService(new Intent(Chats.this, ChatService.class), mConnection, 
      Context.BIND_AUTO_CREATE); 
    mIsBound = true; 

} 

ВТОРОЙ EDIT Оказывается, это не имеет ничего общего с привязкой к службе, то же самое происходит, даже когда я не связываться с сервисом (сервис перезапускается, когда приложение закрывается). Выполнение службы по отдельному процессу также не помогло решить эту проблему.

+1

Покажите нам свой код, сервис, деятельность, с которой вы начинаете работать. – rom4ek

+0

@ Добавлены блоки кода Romadja. – Eran

+0

Итак, какова ваша проблема сейчас? Если ваш возвращающийся START_REDELIVER_INTENT означает, что вы готовы к уничтожению службы и можете восстановить его, это не должно вызывать никаких проблем. – rom4ek

ответ

0

Если метод startService() используется для запуска службы в других местах, он перезапустится, даже если связанная с ним деятельность была уничтожена. Убедитесь, что вы запускаете службу только методом bindService().

+0

Но мне нужно, чтобы служба запускалась после того, как действие отвязалось от нее, и, насколько мне известно, если я запускаю службу только с помощью bindService, это остановит момент, когда моя деятельность отвязается от него. Я прав? – Eran

+0

Собственно, нет. Если вы отвязываетесь от службы, это означает, что ваша деятельность не связана с вашим сервисом, но сервис должен быть живым. – rom4ek

+0

Так что я должен отказаться от startService и использовать bindService? Что делать, если я хочу, чтобы служба запускалась до того, как я привяжусь к ней? (например, убедитесь, что он запускается при запуске приложения и привязывается к нему только в определенной активности) – Eran

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