当我执行某个事件时,我无法弄清楚如何删除侦听器。我有一些使用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 ....
并且传入时,有一个对象需要其他对象而其他对象依赖于此,我现在仍然可以做我想做的事。
看起来它很简单,但无法弄明白。
答案 0 :(得分:0)
通常情况下,可以使用removeXXXListener
方法删除事件侦听器。但它要求您提供 exact 相同的事件侦听器实例作为参数。您可以存储事件侦听器,然后使用相同的引用将其删除。但是,由于您在onMessage
消息中已经在事件监听器的范围内,因此使用this
应该可以正常工作。
尝试类似
的内容listener.onMessage(responseMessage);
// Here is the place I want to do my w.removeWebSocketListener(l);
w.removeWebSocketListener(this);
答案 1 :(得分:0)
在匿名内部类中使用“this”是解决问题的方法。但是,重构代码,避免使用匿名类,可测试性和更好的理解是更好的。