Я запускаю Service
с помощью AlarmManager
. Service
работает нормально, и я останавливаю Service
вручную (нажав Button
), но мне нужно остановить Service
через некоторое время (это может быть 10 секунд). Я могу использовать this.stopSelf();
, но как я могу назвать this.stopSelf();
после некоторого времени?
Может быть, вам стоит подумать об использовании IntentService? Он будет остановлен, когда для этого нет работы, поэтому вам не нужно самостоятельно управлять своим состоянием.
Это можно легко выполнить с помощью 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 секунд.
Используйте метод postDelayed Handler
в сервисе, чтобы сделать это. Например:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
stopSelf();
}
}, 10000); //will stop service after 10 seconds
The method postDelayed(new Runnable(){}, int) is undefined for the type Handler
. Другая ошибка - The method run() of type new Runnable(){} must override a superclass method
.
Intent
чтобы запустить Service
. Установите action
для пользовательского действия, например, "com.yourapp.action.stopservice"
.AlarmManager
, запустите Intent
чтобы запустить Service
(независимо от того, что вы сейчас делаете). Это будет передано onStartCommand()
Service
, если она уже запущена.onStartCommand()
проверьте action
входящего Intent
. Если action.equals("com.yourapp.action.stopservice")
, остановите Service
используя this.stopSelf()
.this.stopSelf()
. Я хочу позвонить из onCreate()
.