Android синглтон между сервисом и действиями - PullRequest
2 голосов
/ 13 декабря 2011

Я работаю над проектом, который.Он подключится к удаленному хосту, используя сокеты tcp от службы.И взаимодействуйте с ним для получения и отправки данных.

Поток, который я запланировал, является;

классом синглетного сокета.Который возвращает связанный указатель сокета;

действие, чтобы запросить у пользователя IP-адрес и порт удаленного сервера.служба, запущенная ( намерение ) действием с параметрами ip: port.сервис получит сокет используя класс синглтон сокетаи тогда сервис прочитает данные;проанализируйте его и покажите пользователю действия пользователя в новом окне действий ( предназначено ).после того, как пользователь завершил действие;результат будет отправлен на сервер.и новый запрос будет прочитан.

проблема / запрос здесь;

  • , когда вы вернетесь в службу для второй операции чтения данных;там будет розетка?(или сборщик мусора), потому что после начала операции чтения данных новое соединение не принимается.

  • умрет ли первая служба после вызова действия действий пользователя?

  • что произойдет, если я позвоню в службу с помощью startService из действия, создадим новую службу или снова открою существующую службу, запущенную до запуска?

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

Извините, если я задаю глупые вопросы.

1 Ответ

2 голосов
/ 13 декабря 2011

Вот как я это вижу:

когда вы возвращаетесь в сервис для второй операции чтения данных; будут розетка там? (или сборщик мусора), потому что после чтения данных операция запущена, новое соединение не принято.

Если объект является статическим и имеет сокет в качестве переменной-члена, он, скорее всего, будет там, в вашем единственном шаблоне должны быть средства защиты, чтобы оградить от этой проблемы (if single==null){...}, вы также можете попробовать управлять им, переопределив Application класс и добавление фабричного метода там. Вы должны убедиться, что розетка открыта и закрыта правильно, а не просто повисла, так как это может создать проблемы

РЕДАКТИРОВАТЬ:

Будет ли фактический сокет еще открыт, зависит от времени ожидания сокета

умрет ли первый сервис после вызова действия с действиями пользователя?

Службам нужно сказать, чтобы они прекратились, и поэтому они не умрут

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

Если служба запущена, она не создаст другую, она вызовет onStartCommand() запущенной службы

как я могу позволить службе жить вечно, если я не скажу, что она умрет.

Это поведение по умолчанию

...