代码与范例:
public class XXXX extends Activity implements Runnable {
private static ProgressDialog waitDialog;
private Thread thread;
private void popupProgressDialog(){
// 打开 ProgressDialog
createProgressDialog();
}
private void createProgressDialog(){
// 初始化进度对话框
waitDialog = new ProgressDialog(this);
// 设定消息
waitDialog.setMessage("正在处理...");
// 设定进度显示风格(此处为循环风格)
waitDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// 现实进度对话框
waitDialog.show();
thread = new Thread(this);
/* 在显示进度对话框的同时,
* 在其他线程中执行繁重处理
*/
thread.start();
}
@Override
public void run() {
try {
// 为确保对话框正常弹出,延迟开始处理
//(m:任意延迟一段时间,单位毫秒)
Thread.sleep(m);
} catch (InterruptedException e) {
// 捕获异常。此处省略细节
}
// run 方法中不支持 UI 操作
// 因此通过 handler 来处理
handler.sendEmptyMessage(0);
}
private Handler handler = new Handler() {
public void handleMessage(Message msg){
// backgroudJob() 执行实际的处理,可以是其他类中的方法
backgroudJob();
// 结束 ProgressDialog
waitDialog.dismiss();
waitDialog = null;
}
};
}
说明:通过进度对话框,可以提示用户应用当前正在执行处理,减少用户因 UI 长时间阻塞而产生的烦躁感。此外,ProgressDialog 类还支持 setSecondaryProgress(),以及继承自 Dialog 类的 setCancelable() 和 AlertDialog 类的 setButton() 等方法。
