UDP 多线程 通信
我现在有一个需求:某一个Activity通过UDP发送消息后,接收到消息并进行处理;然后打开另外一个Activity发送消息,并希望在该Activity中获取消息并进行处理(此时不希望第一个Activity还能够接收到消息)。
按照疯狂Android讲义中的办法,我的思路是这样的。在第一个Activity发送消息后建立一个线程来接收消息,并通过Handler传递给第一个Activity处理。
问题在于:如何让第二个Activity接收到消息并处理呢?我也是通过新建立一个线程来接收消息,通过Handler来传递。如果这样的话会出现两个Activity争夺消息的情况。
请各位能指点一二,多谢了。
部分代码如下:
负责接收消息并传递给Handler的线程
public class ReceiveMSGThread implements Runnable{
//该线程所负责处理的Socket
private DatagramSocket socket;
private Handler handler;
//该线程所处理的Socket所对应的输入流
String revData = null;
private byte revMSG[] = new byte[512];
final String TAG = "--ReceiveMessageThread--";
public ReceiveMSGThread(DatagramSocket socket,Handler handler) throws IOException
{
this.socket = socket;
this.handler = handler;
}
public void run()
{
while(true)
{
byte data[] = new byte[512];
DatagramPacket packetR = new DatagramPacket(data, data.length);
try {
socket.receive(packetR);
revData = new String(packetR.getData(),packetR.getOffset(),packetR.getLength());
handler.sendEmptyMessage(0);
Message msg = new Message();
msg.what = 0x123;
revMSG = packetR.getData();
String msgStr = byte2hex(revMSG);
msg.obj = msgStr;
handler.sendMessage(msg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
第一个Activity中部分代码
new Thread(new ReceiveMSGThread(SingletonSocket.socket, handler)).start();
private Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
}
}
如果第二个Activity和第一个Activity中代码相同,就会出现Handler中信息只给某一个Activity传,而另一个Activity接收不到。
再次感谢大家啦。