Предлагаю перейти с Handler#postDelayed(Runnable)
. Имейте в виду, что этот метод будет работать только тогда, когда ваше приложение работает (может быть в фоновом режиме), но если пользователь закрывает его вручную или просто у Android не хватает памяти, он перестанет работать и не будет перезапущен еще раз позже - для этого вам нужно воспользоваться услугами.
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
handler.postDelayed(this, 2 * 60 * 1000); // every 2 minutes
/* your code here */
}
}, 2 * 60 * 1000); // first run after 2 minutes
Этот код будет ждать 2 минуты, выполнять ваш код, а затем продолжать делать это каждые 2 минуты. Но если вы хотите, чтобы он запускался мгновенно в первый раз - и , тогда запустите цикл ожидания, вместо этого используйте:
final Handler handler = new Handler();
/* your code here */
new Runnable() {
@Override
public void run() {
handler.postDelayed(this, 2 * 60 * 1000); // every 2 minutes
/* and also here - your code */
}
}.run();
или, если ваш код длиннее, чем один метод (readWebsite()
в данном случае), и вы не хотите, чтобы его дублировали:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
handler.postDelayed(this, 2 * 60 * 1000); // every 2 minutes
/* your longer code here */
}
}, 0); // first run instantly
(^ этот аналогичен первому примеру, но перед первым запуском имеет задержку 0 мс вместо 2 минут)
(Этот ответ основан на ответе @Devashish Mamgain, но я добавил слишком много деталей для редактирования, поэтому мне пришлось добавить новый)