#java #android #android-fragments
#java #Android #android-фрагменты
Вопрос:
Я пытаюсь подключить свой java-сервер к клиенту 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