Android中线程和进度对话框的用法

  通常我们不能在主线程(UI线程)中做耗时的工作,因为这样容易阻塞用户界面。一般来说如果5秒钟没有响应,android平台就会跳出界面未响应的对话框,这很不友好。因此,这里介绍如何使用线程和ProgressDialog来提示用户。

  代码很简单,如下所示:

public class ProgressDialogExample extends Activity implements Runnable {

    private String pi_string;
    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
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        pd = ProgressDialog.show(this, "Working..", "Calculating Pi", true,
                false);

        Thread thread = new Thread(this);
        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);

        }
    };

}

  这里我们创建了一个线程,在用户按下按键的时候,显示对话框,并启动新线程来计算PI的800位数字。当计算完成后,pi_string会被赋 予计算的结果。同时handler发出消息,表示我已经计算完了。handler在收到消息后,把ProgressDialog关闭,并把 pi_string显示在TextView上。

  需要注意的是在android中,通常我们无法在单独的线程中更新UI,而要在主线程中,这也就是为什么我们要使用Handler了,当handler收到消息中,它会把它放入到队列中等待执行,通常来说这会很快被执行。

posted @ 2011-11-04 14:16  举个栗子  阅读(1634)  评论(0)    收藏  举报