安卓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;
}
}
安卓Handler机制的例子的更多相关文章
- Handler机制原理图、源码、使用!!!!!
android的消息处理机制——Looper,Handler,Message (原理图.源码) 转自:http://my.oschina.net/u/1391648/blog/282892 在开始讨 ...
- Android Handler 机制 - Looper,Message,MessageQueue
Android Studio 2.3 API 25 从源码角度分析Handler机制.有利于使用Handler和分析Handler的相关问题. Handler 简介 一个Handler允许发送和处理M ...
- 简述Handler机制
我会对android的消息处理有三个核心类逐步介绍,他们分别是:Looper,Handler和Message.其实还有一Message Queue(消息队列),知道它是队列即可,就像我们所熟知的数组, ...
- Android Handler机制剖析
android的handler机制是android的线程通信的核心机制 Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃. Android中的实现了 接收消息的& ...
- Android 异步通信:图文详解Handler机制工作原理
前言 在Android开发的多线程应用场景中,Handler机制十分常用 今天,我将图文详解 Handler机制 的工作原理,希望你们会喜欢 目录 1. 定义 一套 Android 消息传递机制 2. ...
- Android源码分析笔记--Handler机制
#Handler机制# Handler机制实际就是实现一个 异步消息循环处理器 Handler的真正意义: 异步处理 Handler机制的整体表述: 消息处理线程: 在Handler机制中,异步消息处 ...
- 【转载】Android 的 Handler 机制实现原理分析
handler在安卓开发中是必须掌握的技术,但是很多人都是停留在使用阶段.使用起来很简单,就两个步骤,在主线程重写handler的handleMessage( )方法,在工作线程发送消息.但是,有没有 ...
- Handler机制与生产者消费者模式
本文梳理了 Handler 的源码,并详细阐述了 Handler 与生产者消费者模式的关系,最后给出了多版自定义 Handler 实现.本文首发于简书,重新整理发布. 一.Handler Handle ...
- Android的Handler机制
Handler机制的原理 Android 的 Handler 机制(也有人叫消息机制)目的是为了跨线程通信,也就是多线程通信.之所以需 要跨线程通信是因为在 Android 中主线程通常只负责 UI ...
随机推荐
- HDU4632:Palindrome subsequence(区间DP)
Problem Description In mathematics, a subsequence is a sequence that can be derived from another seq ...
- squid 安装、配置、优化
官方网站:http://www.squid-cache.org 下载路径:wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABL ...
- MyEclipse设置默认的目光格式
首先,选择菜单 windows-->preference Java-->Code Style-->Code Templates code-->new Java files 然后 ...
- iOS开发——总结篇&IOS开发基础知识
IOS开发基础知识 1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断 ...
- 兼容:判断 iframe 是否加载完成
判断 iframe 是否加载完成其实与 判断 JavaScript 文件是否加载完成 采用的方法很类似 var iframe = document.createElement("iframe ...
- android学习日记19--四大组件之BroadcastReciver(广播接收者)
二.BroadcastReciver(广播接收者) 1.简述 BroadcastReciver位于android.content包下,主要用于对广播消息(Intent)的过滤并响应的控件.可以理解为全 ...
- iPad 3g版完美实现打电话功能(phoneitipad破解)
看到这个标题,有的同学可能吐槽,iPad 用来打电话,多雷人啊,人家apple设计的时候没加电话功能是有益这样做的. 只是这次真的有这种需求,一台測试用的iPad 1 3G版的机器,放进去了一张3G电 ...
- [009]C---关于输出文本的打印问题
现在有这样一个问题: 针对一个long类型的变量,我们想把它打印成为32位显示. #include "stdio.h" int main() { long i =0xa; prin ...
- XMemcached使用示例--转
Memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态Web应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用,memcached通过它的自定义协议与客户端 ...
- js原生bind()用法[注意不是jquery里面的bind()]
<div id="a"> <div></div> <div></div> <div></div> ...