Обновление пользовательского интерфейса активности из Intent Service?
Мне нужно загрузить некоторые файлы (10-20 или зависит от пользователя) из службы в моем приложении. Проблема в том, что я использую IntentSevice и затрудняюсь обновить пользовательский интерфейс. Я знаю следующие способы обновления пользовательского интерфейса
- Используйте обработчик и отправляйте сообщения из службы в деятельность, используя Messenger, как это.
- Отправить трансляцию намерений.
Использование первого метода может вызвать проблемы после закрытия и повторного открытия операции, а также я не уверен в ее эффективности. Использование секунды определенно вызовет проблемы производительности, поскольку мне нужно обновлять интерфейс довольно часто (один или два раза каждые две секунды). Есть ли другой возможный способ обмена данными между IntentService и Activity, который эффективен? или я должен переключить его на Bound Service?
2 ответа
Есть ли другой возможный способ обмена данными между IntentService и Activity, который эффективен?
Используйте шину событий, как LocalBroadcastManager
EventBus, Greenrobot, или Отто Square. Есть IntentService
отправлять события по мере необходимости (например, когда загрузка файла завершена). Ваши действия / фрагменты могут регистрироваться и отменяться для регистрации событий по мере их появления на переднем плане. Если они находятся на переднем плане, они получат событие и смогут обновить пользовательский интерфейс. Вы даже можете определить, не было ли событие обнаружено пользовательским интерфейсом переднего плана, и чтобы служба отображала Notification
при желании.
Этот каталог содержит три примера приложений, демонстрирующих это для трех реализаций шины событий, которые я привел. И, FWIW, вот PDF слайдов, которые я использовал в недавних вебинарах по использованию шин событий.
Попробуйте LocalBroadcastManager ( http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html). Быстрее, чем служба вещания.