安卓系统中的java应用程序和其他系统上相同,都是靠消息驱动来工作的。如下图:
这些工作在安卓中由Looper和Handler来实现。
Looper类使用案例:
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
Looper.loop();
}
}
{
...
new LooperThread().start();
}
函数调用流程:
Looper.prepare():生产一个Looper对象,存放的线程本地存储变量sThreadLocal中。
Looper.loop():获取sThreadLocal中的Looper,处理Looper消息队列中的消息。
Looper、MessageQueue、Message关系:
辅助类Handler的作用由两个:
1、提供封装好的API,方便使用者往Looper的消息队列中插入消息
(1)mQueue:Handler对应的消息队列
(2)mLooper:Handler对应的Looper
(3)mCallback:处理消息的回调
2、提供处理的封装.
(1)hasMessages(int what):判断消息队列中是否有对应的消息码
(2)obtainMessage(int what):创建一个消息
(3)removeMessages(int what):从消息队列中删除消息
(4)sendEmptyMessage(int what):发送一个只有消息号没有实际Message实体内容的消息到消息队列
(5) sendMessage(Message msg):发送一个消息到消息队列
(6)sendMessageAtFrontOfQueue (Message msg):发送一个消息到消息队列,并且放在消息队列的最前面。