Handler(一)——Mars Andoird开发视频第二季第六集(重)

1. 什么是Handler

handler就是消息处理器;并发

Handler、Looper和MessageQueue(消息队列)三者实现了安卓中最重要的消息传递、处理机制。oop

2. Handler、Looper和MessageQueue的基本原理

输入图片说明

  • Handler:负责将消息对象加入到消息队列(Message Queue)中;code

  • Message Queue:蓝色矩形为消息队列。特色为先进先出,数据从尾部加入,从头部出来。对象

  • Looper:负责不停地从队列中往外取出消息对象;没有消息对象时处于等待状态。取出消息对象后,将会交给Handler处理。继承

3. 一个使用Hanlder的例子

例子具体实现这样一个功能:队列

点击按钮,标记消息对象,并发送到消息队列中。 以后当hanlder接收到这个消息对象时,将消息对象的标记(what字段)打印出来。图片

  • 先得建立消息,才能发送消息:
class ButtonListener implements OnClickListener {
		public void onClick(View v) {
			Message msg = handler.obtainMessage();//建立消息
			msg.what = 2;//消息标记what,是一个整型字段
			handler.sendMessage(msg);
		}
	}

接着系统会进行如下操做:消息队列

1 消息对象被发送到消息队列中it

2 Looper从消息队列中取出消息对象class

3 Looper找到与消息对象对应的hanlder对象

4 Looper将消息对象交给handler对象处理

5 handler对象调用handlerMessage(Message msg)方法,来处理消息对象

  • 接着咱们要作的就是重写handlerMessage方法来处理消息对象。

那么咱们须要建立一个继承Handler的类,并重写这个方法。

class MyHandler extends Handler {

		public void handleMessage(Message msg) {
			super.handleMessage(msg);
		}
		
	}
  • 在handlerMessage方法中,咱们想要将消息对象的标记打印出来,那么:
public void handleMessage(Message msg) {
			super.handleMessage(msg);
			
			int what = msg.what;
			System.out.println("what: " + what);
		}
  • 最后,实例化MyHandler对象:

(handler 为 成员变量)

private Handler handler;
handler = MyHandler();

完成以后,咱们点击按钮,就能打印出消息标记了:

输入图片说明

相关文章
相关标签/搜索