2010-07-21 5 views
2

У меня есть два потока с одним идентификатором UI, а другой - рабочий поток. Рабочий поток непрерывно читает порт на некоторых данных с сервера, когда появляется, мне нужно обновить свой веб-просмотр в потоке пользовательского интерфейса. Рабочий поток снова продолжает читать и никогда не заканчивается. Plz предлагает, как это сделать?Как обновить представление в потоке пользовательского интерфейса из рабочего потока

может быть вероятным как «сигналы в C++», который вызывает вызов вызываемого потока. !! Я попытался: 1) Поскольку работающий поток в пользовательском интерфейсе (runOnUIThread) может ухудшить производительность веб-представления пользовательского интерфейса, и если я поставлю поток во сне, он может пропустить данные, появляющиеся в порту во время сна .. (im not sure!) 2) используя Обработчик, я должен указать время до вызова потока снова n снова, что может привести к пропуску данных, если они появились на порту, как sleep(). 3) Имея отдельный поток в том же классе, он дает: любой другой поток, не обновляющий вид основного потока пользовательского интерфейса.

Plz помочь .. :(

+0

Пожалуйста, предложите..do runOnUI повлиять на производительность пользовательского интерфейса ... ..... поскольку у меня есть нить Ui, которая не виснет в любое время. – Placidnick

ответ

1

Может быть, я что-то не хватает, но это, кажется, как создание объекта Handler, а затем с помощью поста() метод является то, что вам нужно: http://developer.android.com/reference/android/os/Handler.html#post%28java.lang.Runnable%29

+0

, используя объект Hadler, а не используя post(), очень сильно замедляет производительность потока пользовательского интерфейса, так как в runnable он зависает при чтении данных с сервера (in.readline). То же, что и с runOnUiThread. Я также пробовал шаблон наблюдателя в JAVA, но, увы :( 1. У меня есть рабочий поток «thread» и «UI». 2. рабочий продолжает ждать данных с сервера, когда получает уведомление о потоке пользовательского интерфейса. 3. На обновлении UI Toast msg на экране. Шаг 3 - проблема, поскольку он говорит : Только оригинальный поток, создавший иерархию вида, может коснуться его представлений. Заранее спасибо. – Placidnick

0

У меня была аналогичная У меня есть поток пользовательского интерфейса и несколько потоков, которые выполняют серверные серверы. Я использую шаблон наблюдателя, чтобы службы обновляли пользовательский интерфейс, и для этого у меня есть метод обновления в новом потоке и вызывайте runOnUiThread(), чтобы обновить интерфейс пользователя Кажется, что это хорошо работает для чего-то быстрого. Если вы хотите что-то лучше, чем быстрая помощь в группах, я бы предложил прочитать от Google this android threading guide и попытаться включить его с ваш дизайн.

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