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

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

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

Оповещение в UI из потока - Программирование Android

12.08.2013, 01:05. Просмотров 543. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Оповещение в UI из потока (Программирование Android):

Оповещение при звонке - Программирование Android
Добрый вечер Возможно ли сделать так чтобы после того как пользователь отвечал на звонок или к примеру приходило смс, выполнялось какое...

Оповещение по заданному времени и дате - Программирование Android
Здравствуйте, есть задача вывести оповещение по заданной пользователем дате и времени. В сети много примеров, но не понятно как с...

Неправильно работает оповещение google Firebase - Программирование Android
Сделал оповещение настроил его таким образом private void showNotification(String title, String message) { Intent intent =...

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

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

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

3
V0v1k
1159 / 983 / 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
1159 / 983 / 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
Привет! Вот еще темы с ответами:

Выполнение слота основного потока через сигнал второстепенного потока - C++ Qt
Доброго времени суток! Вопрос следующий. В основном потоке создается кнопка и Qlabel class Ui_QtGuiApp4Class { public: //...

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

.NET 4.x Записать число в начало потока вернувшись с конца потока после записи нескольких элементов... - C#
public static void Save(List<SomeClass> listSC, String fileName) { using (FileStream fs = File.Create(fileName)) ...

Обращение к элементу WinForms из потока, отличного от потока, в котором это элемент был создан - C#
Пишу приложение, котором при загрузке формы в textbox на этой форме заносятся данные. Причем данных много и процесс занимает длительное...


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
12.08.2013, 10:52
Ответ Создать тему
Опции темы

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