安卓Handler機制的例子

Handler機制是實現線程之間通信的一種很常見的方法,不少時候都會用到。android

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;
 }
}
相關文章
相關標籤/搜索