Handler机制正常运行的基本条件

根据观察,Handler拥有一个Looper类型的成员变量,handler的sendMessage、obtainMessage以及handler中的handleMessage的调用都是通过这个Looper来完成的。因此Looper是整个Handler机制的基础。

Looper包含有一个MessageQueue,顾名思义,它是一个消息循环,维护了一个消息队列。当有Message到来时将其放入MessageQueue。在从队列中提取一个消息时告诉Handler去handleMessage。通过Looper.MyLooper()可以得到当前线程的Looper对象。

Looper是与线程相关的,Activity作为一种UI线程,默认是有Looper的(继承自HandlerThread的缘故?),因此在UI主线程中直接使用Handler机制(包括AyncTask)都是很方便的。但是如果一个线程没有Looper,它就无法创建自己的handler,从而不能接收其他线程发送来的消息。为了避免这个问题,可以通过在线程启动时创建一个Looper,并构造一个Handler来完成。具体可以参考http://hi.baidu.com/android168/blog/item/313f8dff51b13a076d22ebd7.html

你可能感兴趣的:(Handler机制正常运行的基本条件)