Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
1

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

12.08.2013, 01:05. Просмотров 588. Ответов 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 не обновляеЦа
            }
        };
в чем я ошибся и как это исправить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2013, 01:05
Ответы с готовыми решениями:

Оповещение при звонке
Добрый вечер Возможно ли сделать так чтобы после того как пользователь отвечал...

Оповещение по заданному времени и дате
Здравствуйте, есть задача вывести оповещение по заданной пользователем дате и...

Оповещение в приложение, к которому нет доступа
Возможно ли как-то показать сообщение всем, у кого установлено приложение? Но...

Неправильно работает оповещение google Firebase
Сделал оповещение настроил его таким образом private void...

Выполнение слота основного потока через сигнал второстепенного потока
Доброго времени суток! Вопрос следующий. В основном потоке создается кнопка и...

3
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.08.2013, 01:26 2
при втором вызове вы просто выполняете все в UI потоке.

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

Не получается с вторичного потока обратиться напрямую к объекту из главного потока
Добрый день. Проблема заключается в том что не могу в WPF с вторичного потока...

По нажатию на кнопку из другого потока, нужно чтобы 2 потока останавливались
Есть 2 потока, в которых в цикле выполняется метод Thread.sleep(200); По...

Как из потока управлять формой, если функции потока находятся в другом классе?
Добрый вечер. Возник такой вопрос, никак не могу разобраться. Как из потока...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru