Остановка службы намерений, которая выполняет таймерную задачу в Android - PullRequest
2 голосов
/ 31 марта 2012

Я использую службу намерений для периодической отправки запросов на мой сервер, чтобы проверить, есть ли какие-либо обновления. В службе намерений есть задача таймера, которая запрашивает сервер каждые 3 секунды. Она запускается при закрытии приложения.
Теперь, когда пользователь снова возвращается в приложение, я хочу остановить службу.
Как мне это сделать? Как можно остановить службу намерений, которая выполняет таймерную задачу, из другого действия?
Пожалуйста, дайте предложения для Intent Service, потому что именно это я и использую.

Ответы [ 2 ]

1 голос
/ 31 марта 2012

Может быть, лучше использовать только сервис вместо IntentService.

public class UpdateService extends Service {

   public class LocalBinder extends Binder {
        public void startUpdates() {
           // start updateThread if it not started, or
           // notify about resuming probes
        }

        public void stopUpdates() {
           // make updateThread to wait, until startUpdates
           // called again.
           // 
           // REMEMBER this method can be called when startUpdates didnt called.
        }
   }

   // For simplicity we will use local binder.
   private final IBinder binder = new LocalBinder();

   @Override
   public IBinder onBind(Intent intent) {
       return binder;
   }

   private Thread updateThread = new Thread() {
       @Override
       public void run() {
        while (true) {
            // Do updates. Sleep/awake managment.
        }
       }
   };
}

Просто привязать к сервису (с AUTO_CREATE_FLAG ) и запускать обновления, когда вам нужно. Когда показ вашей активности просто привязывается к сервису и останавливает обновления.

0 голосов
/ 10 июня 2017

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

...