Android ==> Сервисный вопрос? - PullRequest
       2

Android ==> Сервисный вопрос?

0 голосов
/ 14 августа 2010

У меня есть служба, работающая в моем приложении для Android, служба - это класс сокетов, который должен работать через все приложение, я создаю его, когда загружается моя первая активность.Как я могу получить экземпляр этого класса сокетов, чтобы я мог вызвать функцию в этом классе.

For example
//how can i get an instance of the running service?
MyService s = getService();
s.writeDataToServer("hello");

Ответы [ 3 ]

2 голосов
/ 15 августа 2010

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

Первый - это LocalService, он такой же, как обычный Service, за исключением того, что он выполняется в том же процессе, что и ваш поток пользовательского интерфейса Activity s, и, следовательно, вы можете получить прямую ссылку на него , Это гораздо более легкий способ создания и использования Сервиса, чем использование AIDL. Я рекомендую использовать AIDL только в том случае, если вы хотите создать внепроцессную службу, к которой должны обращаться разные процессы в вашем приложении или в разных приложениях. Скорее всего, это не то, что вам нужно. Метод LocalService позволит вам поддерживать службу в фоновом режиме и, в свою очередь, держать сокет открытым, даже когда пользовательский интерфейс не используется.

Если у вас нет необходимости держать сокет открытым и вы хотите иметь доступ к нему только с нескольких Activity с, вы можете расширить класс Application и зарегистрировать его в своем манифест. Позволяет управлять глобальным состоянием приложения. Вы можете поместить функции создания и управления сокетом в этот класс, а затем предоставить методы для ваших различных Activity, чтобы получить к нему доступ. Класс Application умирает, когда процесс умирает, поэтому он не подходит для сохранения сокета открытым в течение длительных периодов времени или в периоды, когда пользователь не активно использует ваше приложение.

Существует встроенный метод Activity#getApplication(), который помогает в этом процессе. Вы можете указать свой пользовательский класс Application в AndroidManifest.xml через атрибут android:name.

1 голос
/ 14 августа 2010

Проверьте Intents и метод bindService.

1 голос
/ 14 августа 2010

Язык определения интерфейса Android (AIDL) - это правильный способ подключения к услуге.

Выезд http://developer.android.com/guide/developing/tools/aidl.html

Информация о том, как связаться с сервисом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...