Как использовать сервис?

#android

#Android

Вопрос:

Я внедряю некоторый код и хочу запускать его в обычное время (автоматическое обновление через некоторое время …) Я решил использовать alarm Manager, теперь, когда я знаю, что мы можем использовать отложенное намерение для вызова какого-либо другого приложения, чтобы выполнить некоторую работу от имени нашего приложения.Здесь, используя alarm manager, я запускаю один подобный сервис..

 intent = new Intent(AutoUpdateActivity.this, AlarmService.class);
pI =  PendingIntent.getService(AutoUpdateActivity.this,0, intent, 0);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,firstTime,10*1000,pI);
 

до этого все в порядке, и моя служба запускается через каждые 10 секунд.Теперь, когда я закрываю свое приложение, я хочу отменить AlarmManager, и я делаю это так

 pI.cancel();
 

это также работает нормально, и моя служба больше не запускается..

Но когда я перехожу к настройке и проверяю запущенные службы, он по-прежнему показывает мне, что служба запущена.Где я ошибаюсь? есть ли что-нибудь, что я вводлю в заблуждение?

Для моего простого решения я останавливаю свой сервис следующим образом

 pI.cancel();
stopService(intent);
 

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

Ответ №1:

Лучший способ сделать это — вызвать stopSelf() внутреннюю службу, когда она завершит свою работу. Это эффективно отключит сервис, когда он не нужен.

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

Комментарии:

1. Привет, марк, я не могу использовать этот метод stopSelf() (я не вижу этот метод внутри класса service).

2. он должен быть доступен в вашем сервисе, и он существует с уровня API 1: developer.android.com/reference/android/app /…

3. отлично работает ….. но в этом случае каждый раз, когда создается новая служба, и она уничтожается после завершения ее работы (поскольку я хочу запускать свою службу в повторное время, должна быть создана только одна служба, и ее метод запуска должен вызываться каждый раз). но если я хочу закрыть (уничтожить, при любых условиях) мой запущенный сервис, что мне делать? Или, если бы я постоянно пользовался своим сервисом в телефоне, это имело бы большое значение (я думаю, да, с точки зрения батареи), поэтому я никогда не уничтожу свой сервис

Ответ №2:

Может быть, вы можете попробовать отменить запланированную задачу тоже с:

 alarmManager.cancel(pI);
 

Комментарии:

1. Привет, rciovati, я пытался с этим, но это не останавливает службу, ведет себя так же, как pI.cancel();