2017-04-19 56 views
1

我需要一个运行Thread的服务,该Thread接收UDP数据,然后使用Handler将此数据发送到Activity。我的代码有时会起作用,但是有一段时间,由于某种原因,我无法欣赏调试,因此出现故障。如何在循环中重复使用相同的java消息参数

线程在服务运行

public void run() { 
     //UDP initialize 
     while (true) { 
      //receive UDP packet 
      //set Message obj and what values 
      //send Message to handler 
     } 
} 

活动

protected void onCreate(Bundle savedInstanceState) { 
    //Obtain Message from handler 
} 
+0

你为什么从原始文章中删除所有代码?我的回答(我认为这对你有帮助)现在没用了,你想要什么? –

回答

1

你不断重复使用相同Message对象,基本覆盖已经被排队,并重新排队的对象中的数据一遍又一遍的同一个对象。

这段代码是错误的:

Message msgToActivity = new Message(); 
    DatagramPacket packetIn = new DatagramPacket(receiveData, receiveData.length); 
    while (true) { 
     receiveSocket.receive(packetIn); 
     msgToActivity.obj = new String(receiveData, 0, packetIn.getLength()); 
     msgToActivity.what = 0; 
     LogComActivity.logcomHandler.sendMessage(msgToActivity); 
    } 

您将创建一个单一Message对象,然后修改它和排队它的循环中。

而是执行此操作:

DatagramPacket packetIn = new DatagramPacket(receiveData, receiveData.length); 
    while (true) { 
     receiveSocket.receive(packetIn); 
     Message msgToActivity = Message.obtain(); 
     msgToActivity.obj = new String(receiveData, 0, packetIn.getLength()); 
     msgToActivity.what = 0; 
     LogComActivity.logcomHandler.sendMessage(msgToActivity); 
    } 

这段代码获得一个新Message对象的循环中每一次,但是从回收对象的全局池请求,而不是创建一个新的每次Message对象。


而且,这个调用(内handleMessage())

this.obtainMessage(); 

是无用的,因为你不这样做与返回Message对象任何你不需要的代码删除它

相关问题