handler 用于线程间传值通讯。
MessageQueue:消息队列,用于存放Message。每个线程最多有一个MessageQueue数据结构。线程不会主动创建MessageQueue。UI线程自带一个MessageQueue。
Looper:MessageQueued的管理者,Looper.prepare() 创建该线程的Looper对象,用于接收消息;(这样该线程就有了自己的Looper对象和MessageQueue数据结构了)Looper.loop(); 让Looper开始工作,从消息队列里取消息,处理消息。Looper.myLooper()用于获得looper对象。
Message:消息对象
handler:消息处理者
class MyThread extends Thread{
public void run(){
Looper.prepare(); //创建该线程的Looper对象
//这里Looper.myLooper()获得的就是该线程的Looper对象了
handler = new ThreadHandler(Looper.myLooper());
Message msg = handler.obtainMessage(1,1,1,"我自己");
handler.sendMessage(msg);
Looper.loop();
}
//定义线程类中的消息处理类
class ThreadHandler extends Handler{
public ThreadHandler(Looper looper){
super(looper);
}
public void handleMessage(Message msg){
//这里对该线程中的MessageQueue中的Message进行处理
//这里我们再返回给主线程一个消息
//加入判断看看是不是该线程自己发的信息
if(msg.what == 1 && msg.obj.equals("我自己")){
handler = new MyHandler(Looper.getMainLooper());
Message msg2 = handler.obtainMessage(1,1,1,"禀告主线程:我收到了自己发给自己的Message");
handler.sendMessage(msg2);
}
}
}
}
}