Есть два способа сделать это в зависимости от того, хотите ли вы держать сокет открытым, когда пользователь не использует ваш пользовательский интерфейс.
Первый - это LocalService
, он такой же, как обычный Service
, за исключением того, что он выполняется в том же процессе, что и ваш поток пользовательского интерфейса Activity
s, и, следовательно, вы можете получить прямую ссылку на него , Это гораздо более легкий способ создания и использования Сервиса, чем использование AIDL. Я рекомендую использовать AIDL только в том случае, если вы хотите создать внепроцессную службу, к которой должны обращаться разные процессы в вашем приложении или в разных приложениях. Скорее всего, это не то, что вам нужно. Метод LocalService позволит вам поддерживать службу в фоновом режиме и, в свою очередь, держать сокет открытым, даже когда пользовательский интерфейс не используется.
Если у вас нет необходимости держать сокет открытым и вы хотите иметь доступ к нему только с нескольких Activity
с, вы можете расширить класс Application
и зарегистрировать его в своем манифест. Позволяет управлять глобальным состоянием приложения. Вы можете поместить функции создания и управления сокетом в этот класс, а затем предоставить методы для ваших различных Activity
, чтобы получить к нему доступ. Класс Application
умирает, когда процесс умирает, поэтому он не подходит для сохранения сокета открытым в течение длительных периодов времени или в периоды, когда пользователь не активно использует ваше приложение.
Существует встроенный метод Activity#getApplication()
, который помогает в этом процессе. Вы можете указать свой пользовательский класс Application
в AndroidManifest.xml через атрибут android:name
.