一、Handler的定义:
二、Handler的主要作用
1. 传递Message,用于接收子线程发送过来的数据, 并用此数据配合主线程更新UI。
2. 传递Runnable对象,用于通过Handler绑定的消息队列,安排不同操作的执行顺序。
三、Handler的一些特点
handler可以分发Message对象或Runnable对象到主线程中,每个Handler实例,都会被绑定到创建它的线程中(一般是位于主线程)。
Handler中分发消息的一些方法:
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
以上post类方法允许你排列一个Runnable对象到主线程队列当中;
sendMessage类方法,允许你安排一个带数据的Message对象到队列中。
注意:
代码如下:
public class HandlerTestActivity extends Activity {
private <span style="white-space:pre"> </span>TextView tv;
<span style="white-space:pre"> </span>private static final int UPDATE = 0;
<span style="white-space:pre"> </span>private Handler handler = new Handler() {
@Override
public<span style="white-space:pre"> </span>void handleMessage(Message msg) {
//TODO 接收消息并且去更新UI线程上的控件内容
if (msg.what == UPDATE) {
//Bundle b = msg.getData();
//tv.setText(b.getString("num"));
tv.setText(String.valueOf(msg.obj));}
<span style="white-space:pre"> </span>super.handleMessage(msg);
}
};
<span style="white-space:pre"> </span>@Override
public<span style="white-space:pre"> </span>void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv= (TextView) findViewById(R.id.tv);
<span style="white-space:pre"> </span>new<span style="white-space:pre"> </span> Thread() {
@Override
public<span style="white-space:pre"> </span>void run() {
//TODO 子线程中通过handler发送消息给handler接收,由handler去更新TextView的值
try{ <span style="white-space:pre"> </span>for(int i = <span style="font-family: 微软雅黑, Verdana, sans-serif, 宋体;">0;</span>i <</code> 100;i++) {
<span style="white-space:pre"> </span>Thread.sleep(500);
Message msg = new Message();
msg.what= UPDATE;
//Bundle b = new Bundle();
//b.putString("num", "更新后的值:" + i);
//msg.setData(b);
msg.obj= "更新后的值:" + i;
handler.sendMessage(msg);
}
}catch (InterruptedException e) {
<span style="white-space:pre"> </span> e.printStackTrace();
}
}
}.start();
}
}