Запускать сервис в отдельном потоке и будить его каждые 10 минут? - PullRequest
3 голосов
/ 20 января 2012

Мое приложение будет получать доступ к веб-сервису для доступа к данным (даже если приложение не на переднем плане) каждые 10 минут.Каков наилучший способ сделать это?

Сначала мне нужно запустить службу в отдельном потоке?И как заставить его получать обновления с сервера каждые 10 минут?Некоторые люди говорят, что handler.postdelayed, а некоторые используют Alarm Manager.какой из них лучше, и есть ли у нас примеры.

Ответы [ 4 ]

4 голосов
/ 20 января 2012

Если обновления будут происходить во время работы вашего приложения, вы можете использовать таймер, как предложено в других ответах, или более новый ScheduledThreadPoolExecutor.
Если ваше приложение будет обновляться даже когда ононе работает, вы должны пойти с AlarmManager:

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

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

1 голос
/ 20 января 2012

Джеффри Шарки провел отличную презентацию по теме на Google IO 2009 , внимательно посмотрите на слайде 21.

Это должно дать вам хорошее представление о лучших практиках по этой теме.

Выдержка: не используйте обработчики или таймеры, используйте AlarmManager и setInexactRepeating(..).

0 голосов
/ 20 января 2012

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

timer = new Timer();

    timer.scheduleAtFixedRate(new TimerTask() {

        synchronized public void run() {

            \\ here your todo;
            }

        }}, 60000, 60000);
0 голосов
/ 20 января 2012

Вы можете использовать java.util.Timer или ScheduledThreadPoolExecutor (предпочтительно), чтобы запланировать действие, которое будет выполняться через регулярные интервалы в фоновом потоке.

Здесьобразец с использованием последнего:

ScheduledExecutorService scheduler =
    Executors.newSingleThreadScheduledExecutor();

scheduler.scheduleAtFixedRate
      (new Runnable() {
         public void run() {
            // call service
         }
      }, 0, 10, TimeUnit.MINUTES);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...