Android系列之Handler消息机制的例子
package com.lab.activity;
 import android.app.Activity;
 import android.app.Dialog;
 import android.app.ProgressDialog;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 public class ProgressDialogTest extends Activity {
  // 该程序模拟填充长度为100的数组
  private int[] data = new int[100];
  int hasData = 0;
  // 定义进度对话框的标识
  final int PROGRESS_DIALOG = 0x112;
  // 记录进度对话框的完成百分比
  int progressStatus = 0;
  ProgressDialog pd;
  // 定义一个负责更新的进度的Handler
  Handler handler;
  public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   Button execBn = (Button) findViewById(R.id.exec);
   execBn.setOnClickListener(new OnClickListener() {
    public void onClick(View source) {
     showDialog(PROGRESS_DIALOG);
    }
   });
   //Handler消息处理
   handler = new Handler(){
    public void handleMessage(Message msg) {
     if(msg.what == PROGRESS_DIALOG){
      pd.setProgress(progressStatus);
     }
    };
   };
  
                                         
  }
  @Override
  public Dialog onCreateDialog(int id, Bundle status) {
   System.out.println("create");
   switch (id) {
   case PROGRESS_DIALOG:
    // 创建进度对话框
    pd = new ProgressDialog(this);
    pd.setMax(100);
    // 设置对话框的标题
    pd.setTitle("任务完成百分比");
    // 设置对话框 显示的内容
    pd.setMessage("耗时任务的完成百分比");
    // 设置对话框不能用“取消”按钮关闭
    pd.setCancelable(false);
    // 设置对话框的进度条风格
    pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    // 设置对话框的进度条是否显示进度
    pd.setIndeterminate(false);
    break;
   }
   return pd;
  }
  // 该方法将在onCreateDialog方法调用之后被回调
  @Override
  public void onPrepareDialog(int id, Dialog dialog) {
   System.out.println("prepare");
   super.onPrepareDialog(id, dialog);
   switch (id) {
   case PROGRESS_DIALOG:
    // 对话框进度清零
    pd.incrementProgressBy(-pd.getProgress());
    new Thread() {
     public void run() {
      while (progressStatus < 100) {
       // 获取耗时操作的完成百分比
       progressStatus = doWork();
       
       // 发送消息到Handler
       Message message = handler.obtainMessage();
       message.what = PROGRESS_DIALOG;
       handler.sendMessage(message);
       
      }
      // 如果任务已经完成
      if (progressStatus >= 100) {
       // 关闭对话框
       pd.dismiss();
      }
     }
    }.start();
    break;
   }
  }
  // 模拟一个耗时的操作。
  public int doWork() {
   // 为数组元素赋值
   data[hasData++] = (int) (Math.random() * 100);
   try {
    Thread.sleep(100);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   return hasData;
  }
 }
文章来源: smilenicky.blog.csdn.net,作者:smileNicky,版权归原作者所有,如需转载,请联系作者。
原文链接:smilenicky.blog.csdn.net/article/details/49405617
- 点赞
- 收藏
- 关注作者
 
             
           
评论(0)