学习-Handler的工作原理

2016-03-30 / 8 阅读 / Android

要深入了解Handler的工作原理可能需要先了解关于它的几个组件:

  1. Message:
    Handle接受和处理的消息对象。

  2. MessageQueue:
    消息列队,采用先进先出的方式管理Message。Looper对象创建时会自动创建该对象。

  3. Looper:
    负责读取MessageQueue中的消息对象,调用它的loop方法开始读取消息,并交给Handler来处理。
    且每个线程只能拥有一个Looper

大致流程如下:

graph TD
10=>start: Looper初始化
20=>operation: loop()
30=>operation: 读取Message
40=>condition: 读到
50=>operation: 交给Handler处理
60=>end: 结束

10->20->30->40
40(yes)->50->30
40(no)->30

Handler想要正常工作,当前的线程必须有一个Looper对象。

这里分两种情况:

  1. UI主线程,系统会自动初始化一个Looper对象,因此UI线程可以直接创建Handler使用。

  2. 其他非UI的线程,这时就必须我们来手动创建Looper对象了。

创建方法:
	Looper.prepare();
启动方法
	Looper.loop();

prepare()的源码:

public static final void prepare(){
	if(sThreadLocal.get()!=null){
		throw new RuntimeException("Onlu one Looper may be created per thread");
	}
	sThreadLocal.set(new Looper());
}

prepare()方法创建保证了当前线程的Looper对象唯一

这边不可以使用一般的构造器来创建对象,Looper源代码中是这样的:
	private Looper(){
		mQueue = new MessageQueue;
		mRun = true;
		mThread = Thread.currentThread();
	}
相关推荐