Android Asynk Task - PullRequest
       14

Android Asynk Task

2 голосов
/ 27 февраля 2010

хорошая практика - иметь задачу Asynk с таким циклом внутри?

while (true) { 
check queue and request API

Потому что мне нужно подождать, пока мои действия и сервисы не соединятся с APi.

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 февраля 2010

У меня есть очередь приоритетов, чтобы сначала выбрать важные вызовы API.

В моей программе есть две службы:

  • Вызывается API при добавлении сообщения в очередь. Вызов API выполняется заданием Asinc следующим образом:

    messages.add(request);  
    new DownloadApiTask().execute();
    
  • Другая служба обновляет локальную базу данных. Для этого у меня есть цикл, в котором я вызываю первый сервис, чтобы получить данные из API. Базовая структура:

    while i есть данные для обновления

    mFirstService.putMessage (запрос).

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

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

Надеюсь, вы понимаете мою проблему.

Спасибо

0 голосов
/ 27 февраля 2010

Я предполагаю, что "очередь" - это очередь Java, возможно, LinkedBlockingQueue. Если это так, то эта очередь не нужна, так как AsyncTask имеет очередь, соответствующую ее пулу потоков.

Итак, вопрос в том, что заставляет вещи идти в очередь?

Если триггер представляет собой пользовательское событие (например, выбор меню, нажатие кнопки), просто запустите AsyncTask или Service запустите AsyncTask. Эта работа будет поставлена ​​в очередь системой AsyncTask.

Если триггер является течением времени (например, мы хотим проверять внешний сервер каждые 10 минут), я бы использовал AlarmManager и рассмотрел бы переключение с AsyncTask и Service на использование IntentService .

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