2010-05-16 2 views
2

Приложение, которое я создаю, использует локальный 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? Может быть, это не проблема?

ответ

2

Поэтому я хотел бы избежать привязок к службе каждого вида деятельности является 1.) Я уже работаю другую службу

Затем рассмотрит объединение два.

2.) Связывание многословно, и я хотел бы избежать необходимости проходить вокруг ссылки на Службу

Каждой деятельность должна иметь свое собственное подключение к услуге.

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

Акт привязки к местному сервису является дешевым.

+0

Я рассматриваю возможность объединения двух сервисов, но один из них является сервисом переднего плана, и этого не нужно. Что касается прохода вокруг соединения, я имел в виду в Activity, его представлениях и нажатиях на прослушиватели. – skyler

+0

«Я рассматриваю возможность объединения двух сервисов, но один из них - это функция переднего плана, и этого не нужно». Ах, хорошая логика. «Что касается прохода вокруг соединения, я имел в виду в рамках Activity, его взглядов и щелчков слушателей». ОК. Обычно у меня есть слушатели и такие частные внутренние занятия, поэтому нет необходимости «переходить». – CommonsWare

Смежные вопросы