Android AsyncTask Синхронизация - PullRequest
3 голосов
/ 27 мая 2011

У меня запланированный сервис (для планирования я использую пакет BroadcastReceiver и AlarmManager). Сервис выполняет некоторые длительные операции, используя AsyncTask.

  1. Подключиться к серверу
  2. Проверить наличие обновлений
  3. Загрузка обновлений, если они существуют
  4. Выполнение операций обновления данных

Я вызываю задачу из метода onStart следующим образом:

onStart(...){
...
new AsyncUpdate(...).execute(...);
}

Пользователь может выполнять операции обновления вручную (он нажимает кнопку, которая запускает Сервис). Так что, если он нажимает кнопку во время выполнения задачи AsyncUpdate? По ссылке будет создан новый рабочий поток, поэтому мне нужно их синхронизировать. Для этого я использую статический параметр из моего класса Service:

synchronized(MyService.runLock){//public static Object runLock = new Object();
...perform download and update operations
}

Это правильно?

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

Ответы [ 2 ]

3 голосов
/ 27 мая 2011

Вы можете использовать метод getStatus () .

Сохраните ссылку на ваш AsyncUpdate и посмотрите, возвращает ли он RUNNING или нет.

2 голосов
/ 27 мая 2011

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

...