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

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

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

Про Handler и ProgressBar - Программирование Android

05.06.2013, 22:14. Просмотров 953. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Про Handler и ProgressBar (Программирование Android):

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

Handler - Программирование Android
Вот допустим обьект Handler был создан в активити(то есть в главном потоке). И мы запускаем через этот Handler (его метод post) кусок кода...

Handler - Программирование Android
import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import...

Handler timer - Программирование Android
Добрый вечер. С помощью какого метода в Handler http://developer.android.com/reference/android/os/Handler.html(беда пока с английским) ,...

Не работает Handler - Программирование Android
Я нахожусь на 66 уроке startandroid, здесь упоминается Handler. Почему то отсутствуют у меня методы, которые описываются тут. Вот фрагмент...

Handler и интервал времени - Программирование Android
Создаю хэндлер: Handler h = new Handler(); h.post(obrtimer); Runnable obrtimer = new Runnable() { public void run() { ...

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

нельзя вызывать методы жизненного цикла активити!
0
Max64
20 / 20 / 5
Регистрация: 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
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.06.2013, 22:51 #4
это было просто замечание про методы.
0
05.06.2013, 22:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2013, 22:51
Привет! Вот еще темы с ответами:

Handler vs Service vs AsynkTask - Программирование Android
Есть 2 Activity, пусть A1 и A2. В методе onCreate() Activity A1 запускается новый поток, в котором определяются координаты местоположения...

Handler, поток не останавливается - Программирование Android
Добрый вечер. Не могу остановить таймер, при переходе на другую Activity. Возможно ли это вообще? Code: mport...

Потоки (Handler внутри synchronized) - Программирование Android
private Handler Ocnova = new Handler(); private Object sync = new Object(); class newThread extends Thread { //...String mes..... ...

Handler при пересоздании активити - Программирование Android
У меня есть поток Thread, который запускается во фрагменте и получает ссылку на изображение с сервера(парсит JSON выделяет ссылку). И...


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

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

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