Using threads and ProgressDialog
This is a simple tutorial to show how to create a thread to do some work while displaying an indeterminate ProgressDialog. Click here to download the full source.
We'll calculate Pi to 800 digits while displaying the ProgressDialog. For the sake of this example I copied the "Pi" class from this site.
We start with a new Android project, only thing I needed to change was to give that TextView an id in main.xml so that I could update it in the Activity.
Because this Activity is so small I'll show you the whole thing and then discuss it at the end:
- private TextView tv;
- private ProgressDialog pd;
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- setContentView(R.layout.main);
- tv = (TextView) this.findViewById(R.id.main);
- tv.setText("Press any key to start calculation");
- }
- @Override
- pd = ProgressDialog.show(this, "Working..", "Calculating Pi", true,
- false);
- thread.start();
- return super.onKeyDown(keyCode, event);
- }
- public void run() {
- pi_string = Pi.computePi(800).toString();
- handler.sendEmptyMessage(0);
- }
- private Handler handler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- pd.dismiss();
- tv.setText(pi_string);
- }
- };
- }
So we see that this Activity implements Runnable. This will allow us to create a run() function to create a thread.
In the onCreate() function on line 18 we find and initialize our TextView and set the text telling the user to press any key to start the computation.
When the user presses a key it will bring us to the onKeyDown() function on line 27. Here we create the ProgressDialog using the static ProgressDialog.show() function, and as a result the pd variable is initialized. We also create a new Thread using the current class as the Runnable object. When we run thread.start() a new thread will spawn and start executing the run() function.
In the run() function we calculate pi and save it to the String pi_string. Then we send an empty message to our Handler object on line 40.
Why use a Handler? We must use a Handler object because we cannot update most UI objects while in a separate thread. When we send a message to the Handler it will get saved into a queue and get executed by the UI thread as soon as possible.
When our Handler receives the message we can dismiss our ProgressDialog and update the TextView with the value of pi we calculated. It's that easy!

Comments
The post is written in very a
The post is written in very a good manner and it entails many useful information for me. I am happy to find your distinguished way of writing the post. Now you make it easy for me to understand and implement the concept. Thank you for the post. dermajuv reviews
SEO
We are based out of Toronto, Ontario but also have application development centers in India, China and Israel. We have several practice areas each of which is supported by one of our microsites. We are a company that lives by our core values while providing both an exceptional level of customer service and a compelling value proposition to the marketplace.
Image to Joomla|blackberry application developer|
Distribute iPhone Application|
PSD to Drupal Template|android applications development|Convert Image to HTML Code
I did
I did get it to run on 38
Driving Directions.
Peliculas Gratis
Traductores
Nice post !!!
I was searching for 'the process of creating thread' and this post provides the needed information and is very useful. The ProgressDialog display is set always and we can make the thread to perform the needed job. This is explained in detail with the help of Android project.
Dallas SEO
does it go away?
It looks like it never goes away!
J
Google For Driving Directions.
How can I cancel the
How can I cancel the computerizing thread when I cancel the progress dialog?
in onCreate()
Does anyone know of a way to call a dialog box during onCreate()? If I put it in onClick() or something like that it works fine, but if I put it in onCreate() it shows the progressDialog from the home screen then renders the activity..
Setup a Handler and send a
Setup a Handler and send a message to the Handler in onCreate() and then have the Handler launch the dialog. I'm pretty sure that works..
cancel the thread ?
How can I cancel the computerizing thread when I cancel the progress dialog?
Depends what the thread is
Depends what the thread is doing, see this doc:
http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecatio...
not working
I am trying this with a new class.. however it says Can't call handler inside the thread that has not called Looper.preapre().
Tryied to put Looper.prepare() in the calling thread.. but no use.
Could you explain what could be wrong here..
Regards,
Raja Nagendra Kumar
C.T.O
www.tejasoft.com
The handler runs in whatever
The handler runs in whatever thread created it. So if you're not creating the instance of the new class in the UI thread then the handler isn't running in the UI thread and you will have a problem.
It get to the run function
It get to the run function yes, but after that never goes to handleMessage function..
Thanks.
Admiring the time and effort
Admiring the time and effort you put into your blog and detailed information you offer. I will bookmark your blog and have my children check up here often.
mcitp
mcpd
No the text does not change
No the text does not change at all.. I´ve been doing some test, and it seems it never enter here -->
public void handleMessage(Message msg) {
pd.dismiss();
tv.setText(pi_string);
}
Any idea?..
I like the way you explain
I like the way you explain the things. Keep posting. Thanks..I will be one of your loyal reader if you maintain this kind of post.
mcse
mcts
Does it ever get to the
Does it ever get to the run() function on 38?
Yes it get to the run
Yes it get to the run function..
Thanks but it´s not working
Thanks but it´s not working for me, I don´t see the dialog dismiss..
The dialog never goes away?
The dialog never goes away? Does the text view get set with the value?