我现在有一个需求:某一个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接收不到。再次感谢大家啦。

解决方案 »

  1.   

    1、发送消息和接收消息你不应该放在UI线程里头做的,你应该另起一个线程。
    2、假设你另起了一个线程来做这些网络IO,那么就不存在activity竞争消息了。你应该改变思路,当网络线程接受到返回消息后,保存到队列里头,再进行内容的转发。你可以建立一个字典,当消息返回的时候通过消息标志查找对应的回调,回调中再post给相应的activity的handler。
      

  2.   


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