#android #service #intentservice
#Android #Обслуживание #intentservice
Вопрос:
У меня есть действие с кнопкой загрузки. Когда я нажимаю на нее, запускается служба. Сервис создает уведомление и публикует его в панели уведомлений. Если я покажу сведения об уведомлении, я смогу увидеть панель progrees, показывающую статус загрузки.
Поскольку я не знал, что служба выполняется в главном потоке, кто-то предложил мне использовать intentservice, который сам создает рабочий поток. ИТАК, все в порядке, и мой графический интерфейс не зависает во время загрузки.
У меня есть одна проблема. Чтобы использовать intentservice, мне пришлось реализовать код загрузки и часть уведомления внутри метода onHandleIntent. Теперь я узнал, что intentservice имеет своего рода очередь, которая управляет намерениями один раз за раз. ИТАК, если я дважды нажму кнопку загрузки из действия, оно отправит новое уведомление, запустит загрузку, а затем, когда оно завершит ее, снова введите onHandleIntent, оно создаст второе уведомление и запустит вторую загрузку. Для меня нормально загружать файлы последовательно, а не вместе, но, по крайней мере, я хотел бы, чтобы, если я дважды нажму кнопку загрузки, serivce загружал уведомления о том, что ожидаются 2 загрузки. Я не могу этого сделать, потому что служба намерений выполняет код один раз и один раз again……….Is есть способ это исправить?
Есть ли способ обработать очередь вручную, сказав что-то вроде …. если вы получите другое намерение, сделайте это ……. уведомление об обновлении ……. и затем продолжите первую загрузку….
Другой вопрос, может ли служба intent модифицировать графический интерфейс, учитывая, что он работает в другом потоке, или я должен использовать обработчик и отправить сообщение обратно в activity?
И последнее, где создается поток, сразу после onCreated метода или внутри onHandleIntent???
Комментарии:
1. Пожалуйста, уточните свой вопрос, чтобы его было легче понять.
Ответ №1:
Возможно, вы могли бы сохранить количество загружаемых элементов в SharedPreferences или в файле класса приложения (к обоим можно получить глобальный доступ) и передать количество намерений в IntentService для уведомлений. В вашем классе приложения могут быть методы для обновления номеров загрузок (общее количество, текущий файл и т.д.). Вы могли бы обновить это из IntentService, когда оно будет уничтожено, или загрузить полностью и отобразить в уведомлении.