安卓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;
 }
}
时间: 2024-10-22 16:26:48

安卓Handler机制的例子的相关文章

android源码大放送(实战开发必备),免费安卓demo源码,例子大全文件详细列表

免费安卓demo源码,例子大全文件详细列表 本列表源码永久免费下载地址:http://www.jiandaima.com/blog/android-demo 卷 yunpan 的文件夹 PATH 列表 卷序列号为 0000-73EC E:. │ jiandaima.com文件列表生成.bat │ 例子大全说明.txt │ 本例子永久更新地址~.url │ 目录列表2016.03.10更新.txt │ ├─前台界面 │ ├─3D标签云卡片热门 │ │ Android TagCloudView云标签

【转载】Android 的 Handler 机制实现原理分析

handler在安卓开发中是必须掌握的技术,但是很多人都是停留在使用阶段.使用起来很简单,就两个步骤,在主线程重写handler的handleMessage( )方法,在工作线程发送消息.但是,有没有人想过这种技术是怎么实现的呢?下面我们一起探讨下. 先上图,让大家好理解下handler机制: handler机制示例图 上面一共出现了几种类,ActivityThread,Handler,MessageQueue,Looper,msg(Message),对这些类作简要介绍: ActivityThr

Handler机制原理图、源码、使用!!!!!

android的消息处理机制——Looper,Handler,Message  (原理图.源码) 转自:http://my.oschina.net/u/1391648/blog/282892 在开始讨论android的消息处理机制前,先来谈谈一些基本相关的术语. 通信的同步(Synchronous):指向客户端发送请求后,必须要在服务端有回应后客户端才继续发送其它的请求,所以这时所有请求将会在服务端得到同步,直到服务端返回请求.  通信的异步(Asynchronous):指客户端在发送请求后,不

Handler机制实例

Handler机制原理推荐看这篇博客:http://blog.csdn.net/jiayi_yao/article/details/51082073 实例,请看本文. AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" pack

handler机制原理分析(适合初学者)1.0

任何一个APK都是从framework层的ActivityThread的main()函数中开始执行,接着调用prepareMainLooer()为UI线程创建一个消息队列MessageQueue.并执行Looper.loop(). Handler消息机制的原理是什么了?我们先来写一个程序看看. 首先看new Handler().做了什么 可以看出在new Handler()中获取了Loop,messagequeue,callback,等对象. 接下来看handler.sendEmptyMessa

13.安卓消息处理机制

1.Android消息处理机制(★★★★必会) 1.1.Looper.Message.Handler的关系 当我们的Android应用程序的进程一创建的时候,系统就给这个进程提供了一个Looper,Looper是一个死循环,它内部维护这个一个消息队列.Looper不停地从消息队列中取消息(Message),取到消息就发送给了Handler,最后Handler根据接收到的消息去修改UI.Handler的sendMessage方法就是将消息添加到消息队列中. 1.2.runOnUiThread Ac

android之handler机制深入解析

一.android中需要另开线程处理耗时.网络的任务,但是有必须要在UI线程中修改组件.这样做是为了: ①只能在UI线程中修改组件,避免了多线程造成组件显示混乱 ②不使用加锁策略是为了提高性能,因为android中经常使用多线程. handler就是为了解决在多个线程之间的通信问题. 二.基本使用: 1 package com.dqxst.first.multithread; 2 3 import android.app.Activity; 4 import android.os.Bundle;

Handler机制.源码分析

Handler机制的原理 : Android提供了handler 和 looper 来满足线程之间的通信 Handler是先进先出的原则 一个线程可以产生一个looper对象,由它去管理线程里面消息队列 MessageQueue Handler 你可以构造handler对象来与looper沟通.可以发送消息 和处理消息 MessageQueue 用来存放线程放入的消息 线程 一般值的是主线程 UIthread Android启动程序的时候会替他建立一个MessageQueue   .Handle

Handler机制中的五大对象

Handler机制中的五大对象 android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道,因此我没将其作为核心类. 另外, 还有一个类: HandlerThread. Message: 消息 MessageQueue: 消息队列 Handler: 消息处理器, 发送, 处理消息 Looper: 循环器 HandlerThread: 消息处理线程 ------