gpt4 book ai didi

android - 如何在循环中重复使用相同的java Message参数

转载 作者:行者123 更新时间:2023-11-30 00:35:16 24 4
gpt4 key购买 nike

我需要一个服务来运行接收 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 对象做任何事情。你不需要那个代码。删除它。

关于android - 如何在循环中重复使用相同的java Message参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43500868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com