在Android系统中的应用程序,与Java的应用程序相同,都是靠消息驱动,简单的说就是:有一个消息队列,我们可以不断的向这个消息队列中添加消息,并从中取出消息,处理消息。Android中与此工作相关的主要是由Handler,Looper以及Message来完成。
- Looper类:为一个线程运行着一个消息循环,内部有一个消息队列,每一个线程只允许最多存在一个Looper;
- Handler类:允许你向一个线程的消息队列中发送消息,处理消息;
- Message类:消息类。
使用样例
首先,我们通过一个简单的例子来学习如何使用,Looper和Handler,并通过这个例子来研究一下其工作原理;
1.我们在LooperThread中为消息循环做准备,并创建一个Handler用于处理消息,注意Handler的创建要在调用Looper.prepare()之后;
public class LooperThread extends Thread {
public Handler mHandler;
@Override
public void run() {
// TODO Auto-generated method stub
Looper.prepare();
synchronized (this) {
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
Log.w("LooperThread", "handleMessage::Thread id---" + getId());
}
};
}
Looper.loop();
notifyAll();
}
}
2.接下来我们在主线程中创建一个新的线程,并通过LooperThread中的Handler向LooperThread线程发送消息;
final LooperThread mLooperThread = new LooperThread();
mLooperThread.start();
new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
while (mLooperThread.mHandler == null) {
try {
wait();//防止在发送消息时Handler还没建立
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
mLooperThread.mHandler.se