Запуск клиента / сервера через фрагмент в Android

#java #android #android-fragments

#java #Android #android-фрагменты

Вопрос:

Я пытаюсь подключить свой java-сервер к клиенту Android (чего я добился одним простым действием). Теперь я хочу добавить фрагмент списка / сведений и иметь возможность передавать информацию на сервер и с сервера, а также обратно в список и сведения. Я использую этот пример в качестве фрагмента представления списка / сведений:

Пример фрагментов Android

У меня есть 3 вопроса:

  • Можно ли затем запустить сервер из этого фрагмента и передавать информацию на сервер и обратно?
  • Будет ли у меня запуск соединения только в основном действии или во всех фрагментах?
  • Если только в основном действии, как бы я передал информацию обратно из фрагментов в основное действие?

Я совсем новичок в Android и все еще учусь, поэтому я задаю все эти странные вопросы.

Большое спасибо!

Ответ №1:

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

Технически вы можете написать «серверный» код в том же классе, что и фрагмент, если он выполняется в другом потоке, но также знайте это — фрагменты имеют жизненные циклы, что означает, что как только пользователь перейдет к другому фрагменту / действию или вернется к панели запуска — сервер и связь будут прерваны!

Вы должны создать службу Android, которая выполняет эти коммуникационные функции и продолжает работать в фоновом режиме, даже если ваше приложение скрыто / не запущено (по вашему усмотрению).

2) Вы запускаете соединение только один раз, нет необходимости запускать его из каждого фрагмента / действия.

3) Существует множество способов передачи данных. Обычно это происходит с намерениями, читайте об этом.

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

Комментарии:

1. Спасибо за ответ! То, что я делал до сих пор, — это останавливал сервер при каждом запуске намерения и запускал его при запуске следующего действия. Будет ли достаточно Asynctask вместо службы Android? Меня просто беспокоит, где я мог бы прочитать строку, которую я вернул бы со своего сервера. В onPostExecute?

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

3. Кстати, если мой ответ помог вам задать вопрос, пожалуйста, подумайте о том, чтобы принять его.

4. Возможно, у вас есть хорошая ссылка, на которую я мог бы сослаться, поскольку я впервые слышу о службе Android?

5. Это хорошее чтение, удачи! vogella.com/tutorials/AndroidServices/article.html