当我执行某些事件时,我只是不知道如何删除监听器。我在使用 websockets 时遇到了一些泄漏问题,这可能可以解决它。
final WebSocket w = asyncHttpClient.prepareGet(url)
.execute(new WebSocketUpgradeHandler.Builder().build())
.get();
w.addWebSocketListener(new WebSocketTextListener() {
public void onMessage(String message) {
listener.onMessage(responseMessage);
// Here is the place I want to do my w.removeWebSocketListener(l);
}
@Override
public void onFragment(String s, boolean b) {
}
public void onOpen(WebSocket websocket) {
}
@Override
public void onClose(WebSocket webSocket) {
}
@Override
public void onError(Throwable throwable) {
}
});
问题是当我创建 WebSocketTextListener lis = new ....
并传入一个对象需要其他对象而其他对象依赖于此时,我现在仍然允许做我想做的事。
看起来很简单,但是想不通。
最佳答案
通常可以使用 removeXXXListener
方法删除事件监听器。但它要求您提供完全相同的事件监听器实例作为参数。您可以存储事件监听器,然后使用相同的引用将其删除。但由于您在 onMessage
消息中已经位于事件监听器的范围内,因此使用 this
应该可以工作。
尝试类似的事情
listener.onMessage(responseMessage);
// Here is the place I want to do my w.removeWebSocketListener(l);
w.removeWebSocketListener(this);
关于Java 执行回调时删除监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13288389/