• 安卓Handler机制的例子


    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;
     }
    }
  • 相关阅读:
    给webstorm换个背景图
    css遮罩 mask属性
    svg图标
    BFC原理
    轮播图与图片查看器
    超大分辨率屏幕适配方案
    移动端适配-动态计算rem
    [Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive. 报错
    由于ie浏览器ajax缓存 导致layui table表格重载失败的解决办法
    实现线程操作的三种方法
  • 原文地址:https://www.cnblogs.com/mzq123/p/4982600.html
Copyright © 2020-2023  润新知