UDP 多线程 通信

autujuny 2012-09-22 05:03:25
我现在有一个需求:某一个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接收不到。



再次感谢大家啦。

...全文
186 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sniffer12345 2012-09-23
  • 打赏
  • 举报
回复
1、发送消息和接收消息你不应该放在UI线程里头做的,你应该另起一个线程。
2、假设你另起了一个线程来做这些网络IO,那么就不存在activity竞争消息了。你应该改变思路,当网络线程接受到返回消息后,保存到队列里头,再进行内容的转发。你可以建立一个字典,当消息返回的时候通过消息标志查找对应的回调,回调中再post给相应的activity的handler。
autujuny 2012-09-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
1、发送消息和接收消息你不应该放在UI线程里头做的,你应该另起一个线程。
2、假设你另起了一个线程来做这些网络IO,那么就不存在activity竞争消息了。你应该改变思路,当网络线程接受到返回消息后,保存到队列里头,再进行内容的转发。你可以建立一个字典,当消息返回的时候通过消息标志查找对应的回调,回调中再post给相应的activity的handler。
[/Quote]

你好 我是个Android小小菜鸟 你说的没看太懂 我现在的做法是发送消息是在UI线程里面,接收是单独的线程。如何保存到队列并进行回调我不是很清楚您能具体说说吗?谢谢了。

80,392

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧