Android系列之Handler消息机制的例子

举报
yd_273762914 发表于 2020/12/02 22:34:39 2020/12/02
【摘要】  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....



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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。