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收到消息中,它会把它放入到队列中等待执行,通常来说这会很快被执行。

浙公网安备 33010602011771号