Android之Handle的使用原理解析

来源:互联网 发布:伍佰 白鸽 知乎 编辑:程序博客网 时间:2024/05/13 04:27

一,Handle的作用

  Handle的作用是什么,其实Handle的作用与intent类似。只不过intent是实现Android四大组件之间的通信,而Handle是实现线程间的通信,例如:当子线程做一个耗时的操作的时候,我们并不知道他什么时候做完,做完了也不知道,那么,我们是不是需要一个东西来通知我们,让我们知道呀,所以说,也就有了Handle的来源,没有Handle这个东西,对我们来说,非常的麻烦。


二,Handle的消息机制原理

1.图片解析:


2.内容解析:

目的:子线程下载图片,完成后通知主线程更新UI;

1.主线程中有一个消息处理器Handle,被放在消息队列message queue中;

2.主线程中有一个消息队列存放消息;

3.主线程中有一个Looper(不断循环消息队列取消息),如果发现有新的消息,就把消息传给消息处理器Handle,handle会调用handleMassage()处理消息。


3.具体实施

1.子线程利用handle发送消息到主线程中;

2.主线程中Looper不断循环获取新消息;

3.发现新消息调用handleMessage()处理消息;


三.示例代码

package com.zengtao.classwork;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.ActionBarActivity;import android.widget.ProgressBar;public class MainActivity extends ActionBarActivity {private ProgressBar pb; // 进度条private int[] randData = new int[100]; // 数组private int index = 0; // 索引private int mProgressStaus = 0; // 设置进度条的长度private Handler mHandler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);pb = (ProgressBar) findViewById(R.id.pb);// 初始化handle,绑定在主线程中的队列消息中mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);// 接收消息if (msg.what == 0x111) {mProgressStaus = index;pb.setProgress(mProgressStaus);}}};// 创建子线程,在子线程中处理耗时工作new Thread() {@Overridepublic void run() {super.run();while (index < 100) {doWork();Message msg = new Message();msg.what = 0x111;mHandler.sendMessage(msg);}}}.start();}/*** 模拟耗时工作(一定要在子线程中做)* * @return 进度条的多少*/public int doWork() {randData[index++] = (int) (Math.random() * 100); try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}return index;}}

四:示例代码注解

1.主线程中创建Handle对象

2.子线程中发送消息到队列中

3.主线程looper获取消息,利用handleMessage()方法处理




原创粉丝点击