Handler
- 基本概念
Handler:接收子线程发送的数据,并用此数据配合主线程更新UI。(子线程与主线程通信的工具)
Handler定义在主线程中(UI线程中);
Handler充当主线程和子线程之间交互的中介:
Handler在新启动的子线程中发送消息;
主要方法
post(Runnable) postAtTime(Runnable,long) sendEmptyMessage(int) sendMessageAtTime(Message,long)
以上post类方法允许你排列一个Runnable对象到主线程队列中,
sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新.- 基本流程
创建Handle
Handler mhandler = new Handler(){
public void handleMessage(Message msg)
{
switch (msg.what){
//case后必须跟常量,即为final的
case CURRENT_MSG:
t.setText("ggg");
break;
}
};
};
创建Thread对象
Thread mThread = new Thread(){
public void run()
{
Message msg= mhandler.obtainMessage();
msg.what=CURRENT_MSG;
mhandler.sendMessage(msg);
};
};
启动thread
mThread.start();
//只能放int型数据
mhandler.sendEmptyMessage(CURRENT_MSG);
//允许处理Message对象
mhandler.sendMessage(msg);
不用创建线程只是想延迟执行
Message msg = handler.obtainMessage();
msg.arg1 = childIndex;
handler.sendMessageDelayed(msg, delay);
避免恶意操作,将不够延迟时间的操作移除,避免程序内部操作次数
避免恶意操作延迟执行,只执行最后一次的操作:
class x implements Runnable {
private boolean enable ;
public x(boolean enable) {
this.enable = enable;
}
public void run() {
//要延时的操作
}
}
X ref;
final boolean isEnable = enabled;
mHandler.removeCallbacks(ref);//移除上次的操作
ref = new x(isEnable);
mHandler.postDelayed(ref, 1000); //延时执行
这里写代码片
网上一个很不错的帖子
(http://www.itzhai.com/android-the-role-and-use-of-handler.html#read-more)