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

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

Войти
Регистрация
Восстановить пароль
 
Max64
19 / 19 / 5
Регистрация: 27.10.2012
Сообщений: 156
#1

Про Handler и ProgressBar - Android

05.06.2013, 22:14. Просмотров 858. Ответов 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;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2013, 22:14     Про Handler и ProgressBar
Посмотрите здесь:

Handler и интервал времени Android
Android Передача сообщения из потока. Handler
Handler timer Android
Handler, поток не останавливается Android
Handler vs Service vs AsynkTask Android
Android Объясните про параметры ProgressBar
Android Потоки (Handler внутри synchronized)
Android Работа с Handler из другого активити
Android Не работает Handler
Android Handler
Android Handler
Android Handler при пересоздании активити

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.06.2013, 22:36     Про Handler и ProgressBar #2
вы не умеете оператор if использовать?

нельзя вызывать методы жизненного цикла активити!
Max64
19 / 19 / 5
Регистрация: 27.10.2012
Сообщений: 156
05.06.2013, 22:45  [ТС]     Про Handler и ProgressBar #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;
    }
}
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.06.2013, 22:51     Про Handler и ProgressBar #4
это было просто замечание про методы.
Yandex
Объявления
05.06.2013, 22:51     Про Handler и ProgressBar
Ответ Создать тему
Опции темы

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