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.
を取得します。なぜそれを解決してメモリリークを防ぐのか?
へ
を置き換える私は考えていませんあなたはリサイクル –
を使用する必要がありますこれは正しいようです。私がメッセージのスパムを開始しても、メモリ消費は平らに見えます。 – Pitel