My activity have a ProgressBar. When start activity, I\'ll check value get from another place and update to ProgressBar. Here\'s my code:
final ProgressBar p
You are running a while (progressBar.getProgress() < 100)
in the UI thread (you use runOnUiThread
) so UI thread will be blocked (and nothing painted) until this loop finish.
You can:
Put the runOnUiThread
inside the loop and, maybe, a sleep inside de runOnUiThread
call. However, it is not the preferred kind of solution since you are using too much CPU to just look for a value change. The sleep approach it a bit ugly but solves the cpu problem. It would be something like::
Thread t = new Thread() {
public void run() {
int oldProgress = 0;
while (progressBar.getProgress() < 100) {
((Activity) ctx).runOnUiThread(new Runnable() {
public void run() {
int value = Downloader.progress.get(gameId+ "");
if (value != oldProgress) {
oldProgress = value;
progressBar.setProgress(value);
progressText.setText(value + " %");
}
}
}
Thread.sleep(500);
}
});
}
};
Update the progress bar in an event way so you only call (in the UI thread) the update code when progress changes. It is the preferred way.