Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Max64
20 / 20 / 7
Регистрация: 27.10.2012
Сообщений: 156
1

Про Handler и ProgressBar

05.06.2013, 22:14. Просмотров 1029. Ответов 3
Метки нет (Все метки)

Есть 2 кнопки - Start и Stop, соответственно запуск и остановка прогресса в ProgressBar, запуск каждый раз идет с нуля.

Если нажать Start после нажатия Stop, скорость прогресса нормальная (100мс на деление)
Если многократно нажимать Start, происходит постоянное увеличение скорости прогресса, получается создаются новые потоки, каждый из которых обновляет прогресс? Как от этого избавиться?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.samples.ui.progressbar;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
 
public class ProgressBarActivity extends Activity 
        implements View.OnClickListener {
    
    private ProgressBar progress;
    private TextView text;
    private boolean isRunning = false;
    
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            progress.incrementProgressBy(1);
            text.setText("Progress: " + progress.getProgress() + "%");
        }
    }; 
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        progress = (ProgressBar)findViewById(R.id.progress);
        text = (TextView)findViewById(R.id.text);
    }
    
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button_start:
            onStart();
            break;
        case R.id.button_stop:
            onStop();
            break;
        }
    }
    
    public void onStart() {
        super.onStart();
        progress.setProgress(0);
        
        // Создаем новый поток
        Thread background = new Thread(new Runnable() {
           public void run() {
               while (isRunning) {
                   try {
                       Thread.sleep(100);
                   } 
                   catch (InterruptedException e) {
                       Log.e("ERROR", "Thread Interrupted");
                   }
                   handler.sendMessage(handler.obtainMessage());
               }
            }
        });
        isRunning = true;
        background.start();
    }
    
    public void onStop() {
        super.onStop();
        isRunning = false;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2013, 22:14
Ответы с готовыми решениями:

Объясните про параметры ProgressBar
добрый день. подскажите пожалуста. что такое скорость продвижения прогресс...

Handler
Вот допустим обьект Handler был создан в активити(то есть в главном потоке). И...

Handler
import android.app.Activity; import android.os.Bundle; import...

Не работает Handler
Я нахожусь на 66 уроке startandroid, здесь упоминается Handler. Почему то...

Handler timer
Добрый вечер. С помощью какого метода в Handler...

3
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.06.2013, 22:36 2
вы не умеете оператор if использовать?

нельзя вызывать методы жизненного цикла активити!
0
Max64
20 / 20 / 7
Регистрация: 27.10.2012
Сообщений: 156
05.06.2013, 22:45  [ТС] 3
Без вызова методов жизненного цикла так же:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.samples.ui.progressbar;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
 
public class ProgressBarActivity extends Activity implements
        View.OnClickListener {
 
    private ProgressBar progress;
    private TextView text;
    private boolean isRunning = false;
 
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            progress.incrementProgressBy(1);
            text.setText("Progress: " + progress.getProgress() + "%");
        }
    };
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        progress = (ProgressBar) findViewById(R.id.progress);
        text = (TextView) findViewById(R.id.text);
    }
 
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button_start:
            Start();
            break;
        case R.id.button_stop:
            Stop();
            break;
        }
    }
 
    public void Start() {
        progress.setProgress(0);
 
        // Создаем новый поток
        Thread background = new Thread(new Runnable() {
            public void run() {
                while (isRunning) {
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        Log.e("ERROR", "Thread Interrupted");
                    }
                    handler.sendMessage(handler.obtainMessage());
                }
            }
        });
        isRunning = true;
        background.start();
    }
 
    public void Stop() {
        isRunning = false;
    }
}
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.06.2013, 22:51 4
это было просто замечание про методы.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2013, 22:51

Handler и интервал времени
Создаю хэндлер: Handler h = new Handler(); h.post(obrtimer); Runnable...

Handler, поток не останавливается
Добрый вечер. Не могу остановить таймер, при переходе на другую Activity....

Handler vs Service vs AsynkTask
Есть 2 Activity, пусть A1 и A2. В методе onCreate() Activity A1 запускается...


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

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

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