nomnom
nomnom

Reputation: 1638

Why do I need a Handler object in this example?

public class ProgressBarTest extends Activity {

    private int progress;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.progress_bar);
        final Handler handler = new Handler();
        progress = 0;
        final ProgressBar pb = (ProgressBar) findViewById(R.id.progressbar);
        new Thread(new Runnable() {
            public void run() {
                while (progress < 10) {
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    progress++;
                }
                handler.post(new Runnable() {

                    @Override
                    public void run() {
                        pb.setVisibility(View.GONE);
                    }
                });
            }
        }).start();
    }

}

Why can't I just put the pb.setVisibility(View.GONE) in the first Runnable inner class? Like this: The program crashes if I write it this way.

        new Thread(new Runnable() {
            public void run() {
                while (progress < 10) {
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    progress++;
                    pb.setVisibility(View.GONE);
                }
            }
        }

The program crashes when the setVisibility statement is executed.

Upvotes: 0

Views: 117

Answers (1)

Raghunandan
Raghunandan

Reputation: 133560

You cannot update ui from a thread. Ui should be updated on the ui thread.

In the second one you are setting the visibility of progressbar inside the threads runs method. Hence it crashes. So you use handler to set the visibility of progress bar in the the first

To know more about handlers.

http://developer.android.com/reference/android/os/Handler.html

Upvotes: 4

Related Questions