Я думаю, что хочу темы.
У вас нет выбора на этом фронте.Вам понадобится поток, который прослушивает ваш сокет для входящих данных.В этом отношении Android ничем не отличается от стандартной Java.
До сих пор я также не могу передавать данные между пользовательским интерфейсом и сетевым потоком, поэтому я не могу ни получать запросы, ни действия для ответовout.
Ну, ваш поток должен управляться Service
.Сетевое соединение поддерживает несколько действий, поэтому никому не нужно владеть потоком.
Затем вам нужно будет решить, когда должно существовать сетевое соединение.Поскольку действия приходят и уходят, вам нужно будет решить, должно ли сетевое соединение существовать только тогда, когда одно из ваших действий находится на переднем плане (в этом случае вы, вероятно, будете связываться со службой с bindService()
из каждого действия), или есть лиэто явная операция «запуск» и «остановка», которую должен выполнить пользователь, поэтому соединение может оставаться в живых после того, как все ваши действия исчезнут (в этом случае вы, скорее всего, будете использовать startService()
вместо bindService()
).
Как только вы узнаете, когда и как вы запускаете / останавливаете службу, вы можете решить, как эта служба сообщит свои результаты различным действиям.Есть множество вариантов, некоторые лучше, чем другие, в зависимости от вашего варианта использования.Зарегистрированные слушатели, Messenger
, трансляция Intents
, ContentProvider
и т. Д. Являются кандидатами.Любой из них может использоваться фоновым потоком и может организовать передачу данных на передний план в основном потоке приложения.Другие действия обычно обновляют свои данные во время onResume()
, так как обычно нет никакого смысла предварительно обновлять их, когда они не отображаются на экране или даже могут быть выгружены из ОЗУ.
IOW, "совет"несколько глав в книге или две.: -)