如何在循环中重复使用相同的 java 消息参数
How to re-use the same java Message parameters in a loop
我需要一个运行接收 UDP 数据的线程的服务,然后使用处理程序将此数据发送到 Activity。我的代码有时可以工作,但有时它会因为某种原因而失败,我无法欣赏调试。
服务中的线程运行
public void run() {
//UDP initialize
while (true) {
//receive UDP packet
//set Message obj and what values
//send Message to handler
}
}
Activity
protected void onCreate(Bundle savedInstanceState) {
//Obtain Message from handler
}
你一直重复使用同一个 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
对象做任何事情。你不需要那个代码。删除它。
我需要一个运行接收 UDP 数据的线程的服务,然后使用处理程序将此数据发送到 Activity。我的代码有时可以工作,但有时它会因为某种原因而失败,我无法欣赏调试。
服务中的线程运行
public void run() {
//UDP initialize
while (true) {
//receive UDP packet
//set Message obj and what values
//send Message to handler
}
}
Activity
protected void onCreate(Bundle savedInstanceState) {
//Obtain Message from handler
}
你一直重复使用同一个 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
对象做任何事情。你不需要那个代码。删除它。