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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
#1

Оповещение в UI из потока - Android

12.08.2013, 01:05. Просмотров 519. Ответов 3
Метки нет (Все метки)

Доброго времени. суть проблеммы в сл. не работает повторное оповещение UI из потока. в приложении создаеЦа новый поток для выполнения некой длинной операции, чтобы пользователь мог видеть ход выполнения, прогрессбар в UI обновляетЦа из потока через Handler. и все работает прекрасно.... когда поток выполняеЦа впервые. но если я запускаю выполнение потока повторно, ввесь код выполняется отлично, но визуально UI никак не обновляеЦа. вот примеры кода:

поток:
Java
1
2
3
4
5
6
7
8
 myThread = new Thread(new Runnable()
        {
            @Override
            public void run()
            {
               DoSomething();
            }
        });
метод в котором выполняется длительная операция:
Java
1
2
3
4
5
6
7
8
9
 private void DoSomething()
    {
// Код выполняющий некие действия...
// ........
 
// обновление прогрессбара
prgHandler.sendMessage(prgHandler.obtainMessage());
 
}
Собственно сам Handler:
Java
1
2
3
4
5
6
7
8
  prgHandler = new Handler()
        {
            @Override
            public void handleMessage(Message msg)
            {
                prbBAR.incrementProgressBy(1);                
            }
        };
ну запуск потока на исполнение в onClick кнопки:
Java
1
2
3
4
5
6
7
8
9
10
11
12
OnClickListener OnButtonStart =  new OnClickListener()
        {
            @Override
            public void onClick(View v) 
            {               
                if(myThread.getState() == Thread.State.NEW)
                    mThread.start(); // Здесь поток создаеЦа первый раз и все выполняеЦа отлично 
                else
                    myThread.run(); // здесь при повторном нажатии на кнопку поток уже запущен и 
                                          // просто выполняеЦа метод Run. код выполняеЦа правильно, но UI не обновляеЦа
            }
        };
в чем я ошибся и как это исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2013, 01:05     Оповещение в UI из потока
Посмотрите здесь:

Завершение потока AsyncTask Android
Android Завершение потока
Android Работа с ListView из потока
Оповещение при звонке Android
Android Завершения потока
Android Ошибка потока в сервисе
Остановка зацикленого потока Android
Подмена потока с микрофона Android
Android Оповещение по заданному времени и дате
Android Не работает остановка потока!
Низкая производительность потока Android
Остановка потока Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.08.2013, 01:26     Оповещение в UI из потока #2
при втором вызове вы просто выполняете все в UI потоке.

Добавлено через 4 минуты
кстати, при помощи AsyncTask можно обойтись без хендлеров.
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
12.08.2013, 10:24  [ТС]     Оповещение в UI из потока #3
а как же тогда быть? чтобы не переписывать все на асинк таск? как вариант смотреть запущен поток или нет и при уже запущенном апдейтить UI напрямую? хотя странное поведение, почему второй раз выполняется в основном потоке?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.08.2013, 10:52     Оповещение в UI из потока #4
Java
1
2
3
4
5
@Override
public void onClick(View v)  {   
               myThread = new MyThread();
               myThread.start();
}
Yandex
Объявления
12.08.2013, 10:52     Оповещение в UI из потока
Ответ Создать тему
Опции темы

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