【发布时间】:2017-10-16 15:07:39
【问题描述】:
我正在尝试使用 this article 创建异步 UDP 套接字。
所以我有这个代码:
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UdpThread
extends HandlerThread {
private static final String TAG = "UDP";
private final Handler uiHandler, workerHandler;
private final DatagramSocket socket = new DatagramSocket();
public UdpThread(final Handler uiHandler, final String hostname, final int port) throws SocketException {
super(TAG);
this.uiHandler = uiHandler;
start();
workerHandler = new Handler(getLooper(), new Handler.Callback() {
@Override
public boolean handleMessage(final Message msg) {
/*
if (msg.what == port && msg.obj == hostname) {
final InetSocketAddress address = new InetSocketAddress(hostname, port);
Log.d(TAG, "Connecting to " + address);
try {
socket.connect(address);
} catch (SocketException se) {
throw new RuntimeException(se);
}
}
*/
msg.recycle(); //java.lang.IllegalStateException: This message cannot be recycled because it is still in use.
return true;
}
});
workerHandler.obtainMessage(port, hostname).sendToTarget();
}
}
但是当我运行代码时,我在尝试回收消息时得到了提到的java.lang.IllegalStateException: This message cannot be recycled because it is still in use.。为什么会这样以及如何解决它并防止内存泄漏?
【问题讨论】:
-
我认为你不必使用回收
-
这似乎是正确的。即使我开始发送垃圾邮件,内存消耗似乎也很平稳。