Network Thread?

Встала задача разработки сетевого приложения под Android. Раньше ни с Java ни с Android не сталкивался, не судите строго.



Сетевые операции в главном потоке выполнять нельзя, исключение выскакивает. Ок. Создаю класс, реализующий интерфейс Runnable. Создаю на его основе новый поток. В цикле принимаю данные. А как данные передать обратно в главный поток? И как из основного потока передать сообщение сетевому потоку? Собственное решение — использовать очереди. Но я не уверен, является ли это потоко-безопасно. Может существует какое-нибудь более элегантное решение?
  • Вопрос задан
  • 3384 просмотра
Решения вопроса 1
FanKiLL
@FanKiLL
Сетевой поток будет постоянным, или его будут запускать по нажатию кнопки или его надо запускать через какой то интервал времени?
Если постоянно в фоне должен быть то делайте Service. В него можно передавать что-то из UI потока и наоборот получать назад.
Подробней про сервисы хорошая статья — читайте тут

Если по нажатию кнопки — то используйте AsyncTask. Важно, вы не сможете обновлять UI элементы из других тредов, так что как получите какие то данные, например нужно обновить список твитов используйте метод runOnUiThread (Runnable action) этот метод есть у всех активити.

Но AsyncTask подходит для маленьких операций, забрать пачку твиттов или забрать rss — не долгие операции.

Используя ExecutorService можно например реализрвать
Producer — Consumer. Сотрите в этом скринкасте как.

Если активити будет несколько, как вы будете шарить между ними очередь? Тут или делать сервис в фоне или инициализировать очередь в Application классе, он будет доступен для всех активити, правда я не могу точно сказать если это хорошая идея хранить там очередь, самому интересно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Konstantin18ko
@Konstantin18ko
Стоматолог
Я хоть и понимаю, что прошло два года.
Лучше сделать так:
Главный поток чекает дочернии потоки и следит за их состоянием.
Весь функционал живёт в дочерних.
Передача между соседними дочерними потоками будет создана через отдельный класс.
И самое главное синхронизавать потоки, ибо скорость обработки выше скорости передачи сети.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы