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

1

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

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

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

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

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

Теги:
networking

1 ответ

4
Лучший ответ

Думаю, мне нужны потоки.

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

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

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

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

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

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

  • 0
    «Я», «совет» - это несколько глав в книге или две ». Например commonsware.com - рекомендуется.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню