Handler的基本概念
包含线程队列和消息队列,实现异步的消息处理机制,跟web开发的ajax有异曲同工之妙。
创建一个Handler对象:
Handler handler = new Handler();
将要执行的操作写在线程对象的run方法当中
Runnable updateThread = new Runnable(){
public void run(){
handler.postDelayed(updateThread,3000);
}
}
一个点击监听事件,在handler中添加要执行的线程
Class StartButtonListener implements OnClickListener{
public voidonClick(View v){
//调用Handler的post方法,将要执行的线程对象添加到队列中
handler.post(updateThread);
}
}
一个点击监听事件,在handler中把线程移除
Class EndButtonListerger implements OnClickListener(){
public void onClick(View v){
handler.removeCallBacks(updateThread);
}
}
2.使用Handler更新ProgressBar的方法
分别使用
updateBarHandler.post(updateThread);
updateBarHandler.sendMessage(msg);
传递线程和消息。
通过Handler的handleMessage()方法处理消息。
首先使用匿名内部类来复写Handler当中的handlerMessage方法,该方法用于接收消息
Handler updateBarHandler = new Handler(){
public void handleMessage(Message msg){
bar.setProgress(msg.arg1);
updateBarHandler.post(updateThread);
}
};
创建一个线程类,用于控制进度条的进度,该类使用匿名内部类的方式进行声明
Runnable updateThread = new Runnable(){
int i = 0;
public void run(){
i = i + 10;
Message msg = updateBarHandle.obtainMessage();
msg.arg1 = i;
try{
Thread.sleep(1000);
} catch(InterruptedException e) {
e.printStackTrack();
}
//将msg对象加入到消息队列
updateBarHandler.sendMessage(msg);
if( i == 100){
updateBarHandler.removeCallbacks(updateThread);
}
}
}
点击按钮事件,加入队列,启动线程
class ButtonListener implements OnClickListener{
public void onClick(View v){
bar.setVisibility(View.VISIBLE);
//线程队列
updateBarHandler.post(updateThread);
}
}
**当使用
handler.post(new Runnable);
时Handler和Activity处于同一个线程当中,在同一个线程中调用run方法。
而使用
Thread t = new Thread(new Runnable());
t.start();
创建的线程和Activity处于不同的线程中**