Android-сервис взаимодействует с несколькими действиями - PullRequest
10 голосов
/ 29 июня 2010

Я пытаюсь провести рефакторинг / редизайн приложения для Android. В настоящее время у меня есть одно действие пользовательского интерфейса (Activity 1), которое создает DataThread. Этот поток отвечает за сетевой ввод-вывод и взаимодействует (предоставляет данные) с пользовательским интерфейсом через handler.

Теперь я хочу добавить другое занятие (новый экран пользовательского интерфейса с видео) - Activity 2. Activity 1 по-прежнему является основным видом деятельности. Activity 2 будет вызвано, когда пользователь нажмет кнопку Activity 1. Данные Activity 2 также получены из DataThread.

Моя идея - поместить логику моего DataThread в Android Service (DataService). У меня вопрос - может ли больше, чем по активности связать с моим DataService одновременно? Есть ли способ сообщить службе предоставлять данные только для определенного вида деятельности?

Любые другие идеи приветствуются?

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 13 ноября 2013

Определенно, более чем один вид деятельности может быть привязан к вашему сервису.Вы получите onBind () для каждого связывающего.Тогда ваш сервис в идеале будет обрабатывать логику взаимодействия с несколькими действиями, идентифицируя их с помощью идентификатора или намерения (с вашими собственными идентификаторами для каждого действия в качестве дополнительных) от onBind () в вашем сервисе.Затем можно было бы запустить службу из фонового потока для каждого связанного с ним действия.

4 голосов
/ 29 июня 2010

Я обычно связываю свой сервис с классом Application и имею некоторый класс контроллера (например, «посредник», я думаю ... не уверен, как названы все эти шаблоны), ограниченный в приложении, которое обрабатывает связь между сервисами и любым другимактивная активность:.

Это будет включать в себя написание собственного класса Application и указание манифесту использовать его.Я более подробно рассказал об этом процессе в предыдущей теме:

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

Вы можете отслеживать «в настоящее время»active "Activity, отправив класс Application в себя на ссылку onResume (также объяснено в примере выше).Это может быть достигнуто путем извлечения ваших Деятельностей из общего базового класса, который имеет способ получения вашего класса Application (приведение из getApplicationContext), и в этом базовом классе 'onResume отправляет ссылку на себя в приложение.Затем вы можете, например, зарегистрировать действия по имени в DataServiceController и отправлять сообщения в текущее действие только в том случае, если оно зарегистрировано в Контроллере для их получения.

...