专栏首页Nicky's blog安卓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;  } }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 窃听风云:扒掉你的最后一条“胖次”

    “每个人的手机都是一部窃听器,不管你开不开机,都能被窃听。”在2009年上映的《窃听风云》中吴彦祖饰演的人物有这样一句台词,随着影片热映,“手机窃听”的问题被更...

    FB客服
  • 用JWT技术解决IM系统Socket长连接的身份认证痛点1、引言2、原作者3、系列文章5、完全搞懂什么是JWT技术6、我们是怎样使用JWT技术的?7、JWT技术的缺点8、点评附录:更多即时通讯方面的文

    本文引用了封宇《JWT技术解决IM系统的认证痛点》一文的部分内容,即时通讯网重新整理、增补和修订,感谢原作者的无私分享。

    JackJiang
  • LitePal操作数据库

    Dream城堡
  • 手把手带你快速上手调试Flutter项目

    在讲解调试工具之前,先来看看有关的设置选项,点击菜单栏File-->Settings-->Languages & Frameworks --> Flutter,...

    AWeiLoveAndroid
  • 运行时权限

    我们在夸数据共享的时候,遇到危险的权限时候系统会让我们进行是否授权,只有我们授权了才能使用这些权限.比如拨号(可能引起收费的敏感权限)等,这里我们来演示一下调用...

    Dream城堡
  • 在Android上用AI识别物体

    AI其中一个很重要的应用就是物体识别。 今天我们来看看如何在Android上实现这个功能。

    PhoenixZheng
  • Android6.0到9.0的适配爬坑总结

      大家还记得Android 6.0权限适配的泪水吗?而现在谷歌已经出了Android P的稳定版,而且谷歌粑粑,为了大家能给辛苦熬夜加班,特地的和个大市场合作...

    用户1269200
  • 安卓开发基础教程-Android多界面应用程序开发

    本套教程主要讲解安卓开发的相关知识,从基础到精通。一方面可以巩固自己所得,另一方面可以帮助对安卓开发感兴趣的朋友。

    做全栈攻城狮
  • Android adb无线调试脚本

    使用adb的无线调试功能十分的方便。 但是实际工作中,总是要手动输入,十分麻烦。所以就把它写成脚本文件。

    deep_sadness
  • 程序员带你学习安卓开发系列-Android文件存储

    输入帐号密码,并勾选记住帐号 ,点击登录时,保存帐号信息。下次登陆可以直接显示上次保存的QQ帐号。

    做全栈攻城狮

扫码关注云+社区

领取腾讯云代金券