Форум программистов, компьютерный форум CyberForum.ru

Форма не обновляется при запуске второго потока - Android

Войти
Регистрация
Восстановить пароль
 
Darth Coder
275 / 256 / 69
Регистрация: 10.06.2011
Сообщений: 695
19.07.2014, 23:21     Форма не обновляется при запуске второго потока #1
Есть следующий код:
Java
1
2
3
4
5
6
7
8
9
public void Upd(){
l=new Ping();
thr=new Thread(l);
thr.start();
while(thr.isAlive()){
srv.setText("текст");
Thread.sleep(100);}
srv.setText(data);
}
при запуске второго потока форма почему-то зависает и обновляется только после завершения Upd, хотя другие действия до завершения второго потока выполняются. Как это исправить?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2014, 23:21     Форма не обновляется при запуске второго потока
Посмотрите здесь:

Android Ошибка при запуске приложения
Ошибка при запуске Android
Android Ошибка при запуске эмулятора
Проиграть звук при запуске Android
GC при запуске приложение Android
Ошибка при запуске проекта Android
Android Ошибка при запуске AsyncTask при нажатии на пункт ActionBar
Потеря потока при смене ориентации Android
При запуске карты тормозит Android
Android Ошибка при запуске VM VB
Ошибка при запуске Android
Вылетает при создании потока Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
210 / 210 / 16
Регистрация: 26.12.2010
Сообщений: 691
20.07.2014, 13:59     Форма не обновляется при запуске второго потока #2
так нельзя .. работать с UI можно только в основном потоке, если же необходимо сделать какие то действия из вне, вызывайте runOnUiTread .. Да и .sleep() не стоит вызывать, если нужна задержка используем либо таймер, но я лично предпочитаю создавать Handler и вызывать postDelayed.
Darth Coder
275 / 256 / 69
Регистрация: 10.06.2011
Сообщений: 695
20.07.2014, 16:06  [ТС]     Форма не обновляется при запуске второго потока #3
прочитал про runOnUiThread, классы Handler и AsyncTask, но так и не понял, как заставить форму обновляться постоянно (иначе стандартый прогрессбар не будет крутиться) И забыл написать, что второй поток никоим образом не изменяет форму,только записывает ответ от сервера в переменную, откуда главный поток и выводит ответ на форму
NiRamz
210 / 210 / 16
Регистрация: 26.12.2010
Сообщений: 691
20.07.2014, 16:36     Форма не обновляется при запуске второго потока #4
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if(msg.what == 1) {
                postDelayed(runnable, 1000);
            }
        }
    };
 
    private Runnable runnable = new Runnable() {
        @Override
        public void run() {
            srv.setText("текст");
            srv.setText(data);
            handler.sendEmptyMessage(1);
        }
    };
И запускаем все это дело -
Java
1
handler.post(runnable);
Darth Coder
275 / 256 / 69
Регистрация: 10.06.2011
Сообщений: 695
20.07.2014, 22:43  [ТС]     Форма не обновляется при запуске второго потока #5
android.os.NetworkOnMainThreadException при запросе на сервер через этот способ.
NiRamz
210 / 210 / 16
Регистрация: 26.12.2010
Сообщений: 691
20.07.2014, 23:39     Форма не обновляется при запуске второго потока #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
так работу с сервером выносите в отдельный поток, можно использовать asynctask
Yandex
Объявления
20.07.2014, 23:39     Форма не обновляется при запуске второго потока
Ответ Создать тему
Опции темы

Текущее время: 21:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru