Handler机制的问题
相信很多人都遇到过这样的面试题。
那为什么需要Handler呢,你们有反问过自己 || 面试官吗?
看完这篇文章相信你下次去面试就能好好的刷一下面试官的气焰了(装逼),毕竟很多公司本身没有android开发人员,面试题都是网上找的,或者理解不深。
- 为什么要有Handler
- 从源码角度理解该机制
本文为楼主原创,转载请表明出处:http://blog.csdn.net/Suma_sun/article/details/51427312
Handler的由来
首先为什么需要Handler呢? ——因为UI更新只能在UI线程。
那为什么只能在UI线程更新UI呢?——因为Android是单线程模型。
那为什么Android是单线程模型?
那是因为如果任意线程都可以更新UI的话,线程安全问题处理起来会相当麻烦复杂,所以就规定了Android是单线程模型,只允许在UI线程更新UI操作。
Handler机制
Handler机制有几个核心类:Handler、Looper、Message、MessageQueue。
Handler机制是一个典型的生产者消费者模式——多个生产者,一个消费者,该模式是处理线程安全的一个经典模式,如果不了解的请自行查阅相关资料,不懂也没关系,并不影响接下来的内容。
关联Looper
首先我们常用的构造方法
/**
* Default constructor associates this handler with the {@link Looper} for the current thread.
*
* If this thread does not have a looper, this handler won't be able to receive messages
* so an exception is thrown.
*/
public Handler() {
this(null, false);
}
默认的构造器 new Handler() 会从当前线程获取Looper关联。
如何关联呢?
public Handler(Callback callback) {
this(callback, false);
}
public Handler(Looper looper) {
this(looper, null, false);
}
public Handler(Looper looper, Callback callback) {
this(looper, callback, false);
}
下面这个构造是所有传入null Looper的归属