gpt4 book ai didi

Java 执行回调时删除监听器

转载 作者:行者123 更新时间:2023-12-02 07:28:02 28 4
gpt4 key购买 nike

当我执行某些事件时,我只是不知道如何删除监听器。我在使用 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/

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