Приложение, которое я создаю, использует локальный Service
для загрузки файлов из Интернета на SD-карту телефона. В этом приложении пользователи могут просматривать списки книг и читать их в режиме онлайн. Пользователь также может загрузить копию книги pdf
для просмотра в автономном режиме.Общайтесь с местным сервисом
Для обработки загрузок Я использую локально связанный Service
. Я не хочу, чтобы этот Service
работал постоянно, только при загрузке файлов. Так что Service
может закрыться, когда его задачи будут завершены, я не привязываюсь к сервису, скорее я отправляю команду «enqueue for download» через Intent
, переданный в Context.startService
.
Книги, доступные для скачивания, показаны в списке. Пользователь может выбрать загрузку книги, щелкнув ее строку в списке. При загрузке мне нужно показать ход загрузки, используя ProgressBar
в строке списка книг. Мне нужно также показать в строках, если книга загружена в очередь, или если ее загрузка завершена или не выполнена. Книги могут отображаться в разных действиях по всему приложению - например, в поиске или в списке любимых книг пользователя. Когда книги отображаются в разных местах, это не одни и те же объекты, но они однозначно идентифицированы их bookId
.
Потому что я не хочу, чтобы привязать к услуге каждого Activity
мой предварительный план был использовать public static final HashMap
на самом Service
класс содержит отображение bookId
для загрузки статуса, enum
из помещён, загрузки, отменен, и т. д. Каждый просмотр книги при отображении проверяет этот статический HashMap, и если bookId находится на карте, извлекает и отображает его статус. Мне не очень нравится эта идея, но на данный момент это единственный способ, с помощью которого я могу получить статус из Сервиса без необходимости связываться с ним и запускать его.
Кроме того, мне необходимо получить процент выполнения загрузки от Service
, для данного bookId
, если это активная загрузка. Опять же, я бы предпочел не привязываться к сервису из всех видов деятельности, поэтому я не уверен, как начать получать текущий прогресс с Service
. Мой текущий план состоит в том, чтобы использовать какой-то однопользовательский посредник, который Service
будет выдавать обновления, и представления могут читать. Но я не очень доволен этой идеей.
Причина, по которой я бы хотел избежать привязки к Service
из каждой деятельности: 1.) Я уже запускаю еще Service
и 2.) привязка многословная, и я бы хотел, чтобы мне не пришлось обходить ссылку к Service
(но, по общему признанию, это не слишком большая проблема).
Возможно, привязка к локальному Service
не стоит того, чтобы этого устраивать? Должен ли я не беспокоиться о привязке к нему от каждого Activity
? Может быть, это не проблема?
Я рассматриваю возможность объединения двух сервисов, но один из них является сервисом переднего плана, и этого не нужно. Что касается прохода вокруг соединения, я имел в виду в Activity, его представлениях и нажатиях на прослушиватели. – skyler
«Я рассматриваю возможность объединения двух сервисов, но один из них - это функция переднего плана, и этого не нужно». Ах, хорошая логика. «Что касается прохода вокруг соединения, я имел в виду в рамках Activity, его взглядов и щелчков слушателей». ОК. Обычно у меня есть слушатели и такие частные внутренние занятия, поэтому нет необходимости «переходить». – CommonsWare