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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Сохранение объекта при повороте экрана http://www.cyberforum.ru/android-dev/thread892547.html
здравствуйте,читаю в доках,что метод onRetainNonConfigurationInstance () устарел и надо пользоваться Fragment.setRetainInstance(true) даже в activity которое вообще не содержит фрагментов. Вопрос как...
Программирование Android Краш при создании активности public class Main_Activity extends Activity { private class LogIn extends AsyncTask<Void, Void, Void> { @Override protected void onPostExecute(Void result) { Intent... http://www.cyberforum.ru/android-dev/thread892480.html
ProgressDialog Программирование Android
public class Main_Activity extends Activity { private ProgressDialog pd; private class LogIn extends AsyncTask<Void, Void, Void> { @Override protected void...
Отсутствие сети Программирование Android
@Override protected Void doInBackground(Void... params) { try { URL url = new URL(source); InputStream is = url.openStream(); ans =...
Программирование Android Дисконнект с эмулятором http://www.cyberforum.ru/android-dev/thread892160.html
В таком варианте работает, но должно быть то, что в комментариях сейчас если это все раскомментировать (и еще один момент, где я использую SharedPreferences, хотя не знаю насколько дело в нем, потом...
Программирование Android Обратная польская запись Пишу калькулятор для Android, все работает как надо но из строки сделать вычисление не получается, вроде б и правильно сделал, но гдето есть косяк. В результате выводятся последовательность числа и... подробнее

Показать сообщение отдельно
Max64
20 / 20 / 5
Регистрация: 27.10.2012
Сообщений: 156

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

05.06.2013, 22:14. Просмотров 912. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru