代码与范例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
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() 等方法。