2010-06-29 4 views
10

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

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

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

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

Заранее благодарен.

ответ

4

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

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

More efficient way of updating UI from Service than intents?

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

+0

Я ищу решение, подобное этому, есть ли какой-либо рабочий пример или ссылка, чтобы получить более подробную информацию об этой реализации, thx – Sam

+7

@Rich Как вам удастся отключить от Сервиса, когда ваше приложение прекратится, если вы связали его в вашем классе приложений? Поскольку Application # onTerminate() никогда не вызывается на производственных устройствах, см. JavaDoc http://developer.android.com/reference/android/app/Application.html –

+0

@SvenJacobs Единственный способ, о котором я могу думать: stopSelf() 'через некоторое время, когда все действия приостановлены. Действия должны сообщать службе свое состояние в этом случае, когда они становятся паузами. Действия никогда не вызывают 'unbindService()', и Служба получает привязку к 'applicationContext' в каждом onResume() для каждой операции. – OneWorld

6

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

+3

@JoakimEngstrom, так почему вы не отредактировали его, чтобы было более ясно? – SMT

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