handler主要实现现在之间的通信。在子线程中执行耗时操作,通过handler传递数据给主线程进行UI的更新。
用法:
1.在主线程中创建Handler子类对象, 重写handleMessage()方法
2. 在子线程中调用handler.sendMessage(msg)向主线程发消息
3. 在handler的handleMessage接收到消息,进行ui的更新。
用法2: post()
直接调用handler.post(Runnable)方法,里面接收一个Runnable接口,可在匿名类直接更新UI.与RunOnUIThread方法类似。
例1.
//创建handler对象
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
//UI更新
tv.setText(msg.obj + "");
};
};
public void click(View v) {
new Thread() {
public void run() {
for ( int i = 0; i < 100; i ++) {
Message msg = handler.obtainMessage();
msg.obj = i;
//子线程中发消息
handler.sendMessage(msg);
System.out.println(i);
SystemClock.sleep(1000);
}
};
}.start();
}
//2.例2: post
handler.post(new Runnable() {
@Override
public void run() {
tv.setText(i + "");
}
});