Службу Android необходимо остановить через некоторое время

1

Я запускаю Service с помощью AlarmManager. Service работает нормально, и я останавливаю Service вручную (нажав Button), но мне нужно остановить Service через некоторое время (это может быть 10 секунд). Я могу использовать this.stopSelf(); , но как я могу назвать this.stopSelf(); после некоторого времени?

Теги:
service

4 ответа

1
Лучший ответ

Может быть, вам стоит подумать об использовании IntentService? Он будет остановлен, когда для этого нет работы, поэтому вам не нужно самостоятельно управлять своим состоянием.

  • 0
    Большое спасибо господин Андрей Манкевич.
2

Это можно легко выполнить с помощью timer и timerTask вместе.

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

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

//TimerTask that will cause the run() runnable to happen.
TimerTask myTask = new TimerTask()
{
    public void run()
    {
        stopSelf();
    }
};


//Timer that will make the runnable run.
Timer myTimer = new Timer();

//the amount of time after which you want to stop the service
private final long INTERVAL = 5000; // I choose 5 seconds

Теперь внутри вашей onCreate() службы выполните следующие действия:

myTimer.schedule(myTask, INTERVAL);

Это должно прекратить обслуживание через 5 секунд.

1

Используйте метод postDelayed Handler в сервисе, чтобы сделать это. Например:

new Handler().postDelayed(new Runnable() {
@Override
    public void run() {
        stopSelf();
    }
}, 10000);    //will stop service after 10 seconds
  • 0
    Это показывает ошибку The method postDelayed(new Runnable(){}, int) is undefined for the type Handler . Другая ошибка - The method run() of type new Runnable(){} must override a superclass method .
  • 0
    поместите часть своего кода в pastebin.com и вставьте ссылку сюда. Дай мне посмотреть, как ты это делаешь.
0
  1. Создайте Intent чтобы запустить Service. Установите action для пользовательского действия, например, "com.yourapp.action.stopservice".
  2. Используя AlarmManager, запустите Intent чтобы запустить Service (независимо от того, что вы сейчас делаете). Это будет передано onStartCommand() Service, если она уже запущена.
  3. В onStartCommand() проверьте action входящего Intent. Если action.equals("com.yourapp.action.stopservice"), остановите Service используя this.stopSelf().
  • 0
    Спасибо Асвин Кумар. Но я не могу понять ваш подход. Мне просто нужно остановить службу через несколько раз. Через некоторое время я вызову this.stopSelf() . Я хочу позвонить из onCreate() .
  • 0
    После запуска службы onCreate вызываться не будет. Все последующие вызовы будут доставлены в onStartCommand (). Я предлагаю вам пройти жизненный цикл Сервиса.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню