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

Параллелизация работы с ProgressBar-ом - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Ошибка в SQLite запросе http://www.cyberforum.ru/android-dev/thread686241.html
Здраствуйте, у меня есть запрос, есть даные в базе (даные точно есть такие что должны б были вернутса в запросе) но у меня ничо не возвращаэтса... в чом проблема, можете подсказать? вот код как я записеваю action_date: ..... String Action_Date=date_edit.getYear()+"-"+date_edit.getMonth()+"-"+date_edit.getDayOfMonth(); .... cv.put("action_date", Action_Date); .... db.insert("events", null,...
Android Handler и интервал времени Создаю хэндлер: Handler h = new Handler(); h.post(obrtimer); Runnable obrtimer = new Runnable() { public void run() { if (secnd<0) {secnd=59; mint--;} TextView tmtext = (TextView) findViewById(R.id.retroTime1); tmtext.setText("0" + mint + ":" + secnd); http://www.cyberforum.ru/android-dev/thread686229.html
Как использовать в запросе параметр типа int Android
Доброго времени суток. Требуется выполнить SQL-запрос, используя параметр типа int. Листинг: String selection="SELECT kkal FROM Product WHERE prod LIKE ? AND _id = /*переменная типа int*/"; String selectionArgs={parametr1}; Cursor cursor = database.rawQuery(selection, selectionArgs); Буду благодарна за помощь :)
Как закрывать приложение? Android
Заранее извеняюсь за глупый вопрос, но чет не могу найти ответа, или не так задаю вопрос гуглу)) как закрыть приложение? какой метод это делает? пользую finish(); но он закрывает только текущую активити, а как выйти совсем?
Android Как при запуске проверить включен ли обычный интернет? http://www.cyberforum.ru/android-dev/thread686162.html
Доброго времени суток. Как при запуске проверить включен ли обычный интернет? То есть Передача данных. Спасибо, за ответы
Android Прикрутить RadioGroup к ListView(SimpleCursorAdapter) Не могу понять как реализовать одиночный выбор из списка: Сейчас выводит список компаний, где я могу сделать множественный выбор, а мне нужно только одиночный. Стандартный адаптер мне не подходит я про это:android.R.layout.simple_list_item_1 RadioGroup я так понимаю для этого случая не подходит. Я попытался сделать: <LinearLayout> ................ <RadioGroup> подробнее

Показать сообщение отдельно
djaba2012
0 / 0 / 0
Регистрация: 02.12.2011
Сообщений: 11

Параллелизация работы с ProgressBar-ом - Android

01.11.2012, 23:17. Просмотров 1076. Ответов 4
Метки (Все метки)

Здравсвуйте!

Помогите пожалуйста разобраться с ProgressBar'ом.

Прочитав несколько любительских статей по параллелизации работы ProgressBar'а, в частности вот эту, эту, официальный ман - все-равно не понял как нужно правильно заставить его работать

Цель следующая - чтобы этот самый ProgressBar визуально менял свое состояние по мере того как программа совершает расчеты.

Суть проблемы (а именно необходимость использования потоков) для данной задачи я осознаю.

Чтобы вы получше поняли проблему - кусок кода:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        switch(v.getId()){
        case R.id.button1:
            for (int i = 0; i < 4; i++) {
                new Thread(new Runnable() {
                    public void run() {
                        brown(n += 5, 0.01);
                        myProgress++;                   
                        
                            mHandler.post(new Runnable() {
                                public void run() {
                                 progressBar1.setProgress(myProgress);
                                }
                            });  
                    }
                }).start();   
 
            }   
            textview1.setText("\nComputation is completed\n");
        }


Краткое описание этого кода: нажимаю на кнопочку, в цикле создаются 4 потока в каждом из который происходит расчет функции brown() со своими параметрами, по окончанию расчета MyProgress увеличивается и компонент ProgressBar действительно визуально меняет свое состояние (т.е. каждый поток при завершении своего расчета, сигнализирует о своем завершении визуальным изменением состояния прогрессбара).
Вся беда вышеприведенного кода в том что, полагаю, первый же досчитавший поток, выходит из цикла и выводит в textview сообщение.
Т.е. в идеале и по логике (ну... в смысле я так думаю) сообщение должно быть выделено только после того как все потоки завершат свое вычисление, но получается иначе.

Если же попробовать "поиграться" с кодом, например:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
                new Thread(new Runnable() {
                    public void run() {
                        for (int i = 0; i < 4; i++) {       //!!! FOR перемещен во внутрь
                            brown(n += 5, 0.01);
                            myProgress++;                   
                        
                            mHandler.post(new Runnable() {
                                public void run() {
                                 progressBar1.setProgress(myProgress);
                                }
                            }); 
                        }
                    }    
                }).start();

Сей метод также приведет к вышеописанному результату - первый же завершившийся поток выведет сообщение о завершении вычисления (в то время когда остальные потоки будут находиться в состоянии рассчета)
или
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            for (int i = 0; i < 4; i++) {
                brown(n += 5, 0.01);          //!!! вынесен вызов функции
                new Thread(new Runnable() {
                    public void run() {
                        
                            myProgress++;                   
                        
                            mHandler.post(new Runnable() {
                                public void run() {
                                 progressBar1.setProgress(myProgress);
                                }
                            }); 
                    }    
                }).start();   
            }
В этом случае "оперативного" обновления состояния ProgressBar'а не будет - когда закончится рассчет, ProgressBar моментально изменит свое состояние на 4.
Ну и так далее, про перестановку кода

Собственно вопросы - правильно ли я пытаюсь решить данную проблему? Как все-таки заставить программу работать так, чтобы дальнейший код (выдача сообщения) совершилась только после того как завершатся все потоки?
Отдельно буду благодарен за ссылку на понятный (!) ман по ProgressBar'у
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru