Android平台中线程通讯的方式是采用Looper和Handler来实现的。与Window是和IOS平台一样,Android系统中同样存在消息机制----即消息队列和消息循环。
一个应用中,主线程(UI线程)默认有自己的消息队列,这个Google已经封转完好,用户可以很好的进行使用。子线程默认情况下是没有消息循环机制的,要实现这种机制也是很容易的。
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
//创建消息队列
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
// 开启消息循环
Looper.loop();
}
}
Google文档中这段经典的代码,也是大家常常会用到的。在做项目时,大家常常用到UI线程与子线程进行通讯,那么Handler的对象会在主线程中new出来就可以解决。但是有些项目中,涉及到子线程之间的通讯。那么子线程之间是如何使用Looper和Handler进行通讯的呢?
这个问题还是要从Handler对象的构建开始。其实也很容易。
Handler(Looper looper)
Use the provided queue instead of the default one.
使用上述的一个API足够处理此类问题。还是从一个实例项目中进行讲解吧。
应用场景-----客户端与server进行文件传输
一个客户端应用,需要跟server进行交互。客户端有一个线程parseRunnable,负责接收server端发过来的数据包进行解析。当这个接收线程收到“传输文件”的PDU时,
将这个消息发送到“文件传输”线程fileTransportRunnable。由