2015-01-18 3 views
0

У меня есть поток, который отправляет запрос на сервер и запрос процесса с сервера.Android Java CountDownLatch обработчик блока HTTP-ответ

У меня есть проблема, когда я использую CountDownLatch в моей теме.

  • В чем проблема?

Когда я отправить запрос я сделать latch.await() позже, и попытаться latch.countDown() после запрос был получен от сервера, но я думаю, что когда ответ пришел он не был вызван в слушателя, потому что основной поток блокируется. я объясню мою проблему с изображением ниже:

enter image description here

Так как я могу это исправить или, может быть, существует еще один способ справиться с этой проблемой?

+0

Пропустите изображение. Дайте нам код. – edharned

ответ

0

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

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

Если вам не нужен результат, напрямую влияющий на пользовательский интерфейс вашего устройства, вы можете использовать IntentService.

Есть определенно другие решения доступны (даже с защелками), но общее правило должно быть:

  • избежать тяжелых операций на основном потоке
  • блокирующих операции
  • ИЗБЕЖАТЬ на главной Теме
+0

Я использую AsyncTask. И это странное поведение. Запрос на вызов обрабатывается методом doInBackground. –