Получение прогресса IntentService - PullRequest
4 голосов
/ 07 октября 2011

Я работаю над приложением Android, которому нужно много вызовов API. Я построил систему, реализующую систему массового обслуживания на основе IntentService. Дело в том, что я хотел бы показать точное обновление ProgressBar во время работы IntentService.

Одним из способов было бы изменить систему очередей на серию AsyncTasks. Мне бы пришлось показать прогресс, используя onProgressUpdate().

Другим способом было бы настроить IntentService и получить прогресс из фонового потока.

Дело в том, что я хотел бы объединить приятные функции IntentService и AsyncTask: создать систему очередей, которая легко обрабатывает события пользовательского интерфейса. Есть ли лучший способ реализовать это?

EDIT: В итоге я использовал AsyncTasks вместо IntentServices. Но, тем не менее, если у кого-то есть хороший шаблон для обмена информацией о прогрессе обновления с IntentService, не стесняйтесь добавлять свой комментарий.

Ответы [ 2 ]

2 голосов
/ 21 ноября 2011

Я бы

  • запуск HandlerThread и обработчика
  • Получить обработчик для основного потока пользовательского интерфейса
  • опубликовать работу в фоновом потоке, используя обработчик этого потока
  • публикация обновлений прогресса и результатов в пользовательском интерфейсе с использованием обработчика потока пользовательского интерфейса

Таким образом, вы можете иметь один фоновый поток для обработки своей рабочей очереди и публиковать все, что вам нравится, обратно в поток пользовательского интерфейса, не имея дело с трансляциями

1 голос
/ 13 августа 2012

Со мной, для IntentService, я думал о вещании, когда начинать индикатор выполнения, а когда заканчивать индикатор выполнения.Как правило, вы можете использовать стандарт «получить обратно» для конечной части.Вы можете зарегистрировать трансляции с разными намерениями с разными строками.

Сложной задачей было выяснить способ вызова, чтобы узнать, отменена ли строка прогресса, и я думал о том, чтобы иметь таблицу состояния, которая может обновляться по мере выполнения вызова REST.Таблица будет иметь идентификатор вызова, и после того, как это будет сделано, запись будет удалена.Таблица будет отслеживать, должен ли поток быть активным.

Итак, поток REST будет проверять таблицу перед каждой отправкой и останавливать все / игнорировать отправку данных обратно, если обнаружит отмену

...