Как организовать это Android-приложение с сетевым вводом-выводом и несколькими действиями? - PullRequest
1 голос
/ 03 июля 2011

Начнем с того, что это первое приложение для Android, которое я пишу, и у меня очень мало опыта работы с Java. Так что нет ничего слишком простого - я мог бы упустить что-то «очевидное».

Вот общий дизайн, с которым я имею дело:

  • Долгоживущее двунаправленное сетевое соединение.
  • Запросы должны отправляться по сети, когда пользователь взаимодействует с пользовательским интерфейсом.
  • Пользовательский интерфейс должен обновляться, когда ответы на указанные запросы возвращаются - асинхронно.
  • Приложение будет содержать несколько действий.

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

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

1 Ответ

4 голосов
/ 03 июля 2011

Я думаю, что хочу темы.

У вас нет выбора на этом фронте.Вам понадобится поток, который прослушивает ваш сокет для входящих данных.В этом отношении Android ничем не отличается от стандартной Java.

До сих пор я также не могу передавать данные между пользовательским интерфейсом и сетевым потоком, поэтому я не могу ни получать запросы, ни действия для ответовout.

Ну, ваш поток должен управляться Service.Сетевое соединение поддерживает несколько действий, поэтому никому не нужно владеть потоком.

Затем вам нужно будет решить, когда должно существовать сетевое соединение.Поскольку действия приходят и уходят, вам нужно будет решить, должно ли сетевое соединение существовать только тогда, когда одно из ваших действий находится на переднем плане (в этом случае вы, вероятно, будете связываться со службой с bindService() из каждого действия), или есть лиэто явная операция «запуск» и «остановка», которую должен выполнить пользователь, поэтому соединение может оставаться в живых после того, как все ваши действия исчезнут (в этом случае вы, скорее всего, будете использовать startService() вместо bindService()).

Как только вы узнаете, когда и как вы запускаете / останавливаете службу, вы можете решить, как эта служба сообщит свои результаты различным действиям.Есть множество вариантов, некоторые лучше, чем другие, в зависимости от вашего варианта использования.Зарегистрированные слушатели, Messenger, трансляция Intents, ContentProvider и т. Д. Являются кандидатами.Любой из них может использоваться фоновым потоком и может организовать передачу данных на передний план в основном потоке приложения.Другие действия обычно обновляют свои данные во время onResume(), так как обычно нет никакого смысла предварительно обновлять их, когда они не отображаются на экране или даже могут быть выгружены из ОЗУ.

IOW, "совет"несколько глав в книге или две.: -)

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