2010-08-28 3 views
1

Возможно ли, что трансляция работает в потоке (только broadcastReceiver)? Насколько я знаю, это невозможно сделать, если нет способа сохранить поток в живых (даже жесткая работа не работает). Пожалуйста, поправьте меня, если я ошибаюсь.Android - BroadcastReceiver внутри потока

Это то, что я хочу сделать: у меня есть клиент и серверная программа, которая работает, не зная, когда кто-нибудь из них будет готов. Клиент будет продолжать отправлять запрос на сервер и в то же время отслеживать ответ с сервера. Получив ответ от сервера, это означает, что сервер подключен к сети.

Я попытался использовать поток (на клиенте), чтобы продолжить отправку запроса на сервер с периодическим сном. А затем попросите основной поток клиента выполнить цикл while с периодическим сном (надеясь поймать ответ, когда есть трансляция с сервера). К сожалению, это не работает.

Клиентский поток был проверен для отправки запроса, сервер отправил ответ, но по какой-то причине основной поток клиента ничего не получает. Выполнение трансляции на сервере и на клиенте проверено на работу, так что это не проблема.

У кого-нибудь есть лучшее решение для этой проблемы?

+0

Я не думаю, что вы понимаете, какие вещательные приемники есть. Они не «бегут» так, как вы думаете. Они асинхронны. Пожалуйста, объясните вашу ситуацию лучше. Вы пытаетесь зарегистрировать его в потоке? Вы пытаетесь отправить трансляцию в потоке – Falmarri

+0

Я пытаюсь зарегистрировать широковещательный приемник внутри потока. Итак, я могу транслировать и получать трансляцию с этого потока. Мне нужен способ сделать поток живым до тех пор, пока мне нужно использовать широковещательный приемник и позже уничтожить поток, когда я им больше не нужен. – lwijono

ответ

0

Я решить эту проблему с помощью двух потоков (в том числе основной поток) на стороне клиента. Создайте новый поток (назовите его потоком X), чтобы продолжать запрашивать службу с сервера (со сном). Держите основной поток в режиме ожидания, не ставьте его в спящий режим или выполните thread.join()). Как только основной поток перехватит ответ от сервера, сообщите об этом потоку X, чтобы убить себя. Таким образом, у нас есть широковещательный приемник, который все еще работает на основном потоке, не получая блок, и у нас также есть другой поток, чтобы продолжать запрашивать сервер. Нижняя сторона этого подхода заключается в том, что ваши следующие команды (после получения ответа от сервера) должны быть выполнены из onReceive().

У кого-нибудь есть лучшее решение?

0

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

Может быть, вы можете сделать это. Мы можем написать custom broadcasts, чтобы когда-либо сервер был готов, вы отправляете намерение трансляции клиенту. Затем клиентское вещаниеReceiver запустит нужный вам поток. . вы можете отправлять запросы на сервер, таким же образом ..

Думаю, это могло бы помочь .. :)

+0

Не уверен, что это сработает. Сервер никогда не знает, когда клиент готов. Это означает, что передача с сервера может не получить клиент. Теперь это похоже на мою оригинальную проблему (в обратном порядке), клиент становится сервером в моем исходном вопросе и наоборот. Мне нужно иметь по крайней мере два потока на сервере: один для приема, а другой - для передачи в эфир клиенту. – lwijono

Смежные вопросы