Handler允许你去处理和一个线程的消息队列相关联的Message和Runnable对象。
每一个Handler只和一个单独的线程以及那个线程的消息队列相关联。
当你创建一个Handler时,它被绑定到正在创建他的线程的消息队列和线程上面,
从这一点看,它传递消息消息和runnable到消息队列,并且执行他们当他们从
消息队列中出来时。
handler主要有两方面的用途:
1):调度消息和Runnable的执行。
2):确保一个动作在一个线程中必定会得到执行。
调度消息主要是用,post(Runnable r),postAtTime(Runnable r,Long l),
postDelayed(Runnable,Long),sendEmptyMessage(int),sendMessage(Message);
sendMessageAtTime(Message,long),还用sendMessageDelayed(Message,long).
post版本的发送方法:确保runnable在消息队列收到后会得到执行。
sendMessage版本的方法:可以携带一个bundle存储的信息由handleMessage()
处理。前提是你必须先要实现一个handler的子类并且实现handlemessage方法。
下面是使用handler的方法:
MyHandler extends Handler {
public MyHandler(Looper looper) {
super(looper);
}
public void handleMessage(Message msg) {
/** 处理接收到的消息*/
}
}
class UpdateRunnable implements Runnable {
public void run() {
Message msg = mHandler.obtainMessage();
msg.what = 10000;
msg.sendToTarget();
}
}
//在需要调用的地方,加入下面代码即可
HandlerThread handlerThread = new HandlerThread("MyHandlerThread");
handlerThread.start();
mHandler = new MyHandler(handlerThread.getLooper());
//add to MessageQueue
mHandler.post(new UpdateRunnable());
每一个Handler只和一个单独的线程以及那个线程的消息队列相关联。
当你创建一个Handler时,它被绑定到正在创建他的线程的消息队列和线程上面,
从这一点看,它传递消息消息和runnable到消息队列,并且执行他们当他们从
消息队列中出来时。
handler主要有两方面的用途:
1):调度消息和Runnable的执行。
2):确保一个动作在一个线程中必定会得到执行。
调度消息主要是用,post(Runnable r),postAtTime(Runnable r,Long l),
postDelayed(Runnable,Long),sendEmptyMessage(int),sendMessage(Message);
sendMessageAtTime(Message,long),还用sendMessageDelayed(Message,long).
post版本的发送方法:确保runnable在消息队列收到后会得到执行。
sendMessage版本的方法:可以携带一个bundle存储的信息由handleMessage()
处理。前提是你必须先要实现一个handler的子类并且实现handlemessage方法。
下面是使用handler的方法:
MyHandler extends Handler {
public MyHandler(Looper looper) {
super(looper);
}
public void handleMessage(Message msg) {
/** 处理接收到的消息*/
}
}
class UpdateRunnable implements Runnable {
public void run() {
Message msg = mHandler.obtainMessage();
msg.what = 10000;
msg.sendToTarget();
}
}
//在需要调用的地方,加入下面代码即可
HandlerThread handlerThread = new HandlerThread("MyHandlerThread");
handlerThread.start();
mHandler = new MyHandler(handlerThread.getLooper());
//add to MessageQueue
mHandler.post(new UpdateRunnable());