Android Как навести порядок в Intentservice? - PullRequest
0 голосов
/ 10 июня 2011

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

Причина: я не знал, что служба работает в главном потоке, кто-то предложил мне использовать службу intentservice, которая создает рабочий поток.само собой.Так что все в порядке, и мой графический интерфейс не зависает во время загрузки.

У меня есть одна проблема.Чтобы использовать intentservice, мне пришлось реализовать код загрузки и часть уведомлений внутри метода onHandleIntent.Теперь я обнаружил, что у службы интентов есть своего рода очередь, которая управляет намерениями один раз за раз.Поэтому, если я дважды щелкну кнопку загрузки из действия, он создаст новое уведомление, начнет загрузку, а затем, когда она закончит, снова войдет в onHandleIntent, создаст второе уведомление и начнет вторую загрузку.Для меня это нормально - скачивать файлы вплотную, а не вместе, но, по крайней мере, мне бы хотелось, чтобы, если я дважды нажму кнопку загрузки, служба загрузит уведомления о том, что ожидается 2 загрузки.Я не могу этого сделать, потому что служба намерений выполняет код один раз и еще раз .......... Есть ли способ исправить это?

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

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

И последнее, где создан поток, простопосле метода onCreated или внутри onHandleIntent ???

1 Ответ

1 голос
/ 24 июня 2011

Возможно, вы можете сохранить количество элементов загрузки в SharedPreferences или в файле класса приложения (к обоим можно получить глобальный доступ) и передать намерение с номером в IntentService для уведомительных сообщений. Ваш класс Application может иметь методы для обновления номеров загрузок (всего, текущего файла и т. Д.). Вы можете обновить его из IntentService, когда он будет уничтожен, или загрузка завершена и отображается в уведомлении.

...