gpt4 book ai didi

java - GWT 2.1 : ResettableEventBus doesn't reset?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:02:42 26 4
gpt4 key购买 nike

public class MyActivity extends AbstractActivity implements ContextChangedEvent.Handler
{
public MyActivity()
{
ClientFactory.INSTANCE.getEventBus().addHandler(ContextChangedEvent.TYPE, this);
}

@override
public void onContextChanged()
{
//do stuff
}
}



//The getEventBus Implementation:
public EventBus getEventBus()
{
if (eventBus == null)
eventBus = new ResettableEventBus(new SimpleEventBus());
return eventBus;
}

当我在 onContextChange() 方法中添加断点时,我得到以下行为:

  • 首先,我只为触发的每个事件中断一次
  • 换个地方,我休息两次
  • 换个地方后,3次....

由于我为每个地方使用了一个新的 MyActivity 实例,我猜测我中断了多个 MyActivity 实例。 ResettableEventBus 应该在每次位置更改时注销所有处理程序。

我错过了什么?

最佳答案

使用 ResettableEventBus,您仍然需要调用 removeHandlers(复数)来分离所有内容。 ResettableEventBus 仅跟踪您的处理程序并添加一个函数以删除附加到此实例的所有处理程序。

如果您正在使用 ActivityManager 并传入您的事件总线,ActivityManager 会将您的 EventBus 包装在 ResettableEventBus 中并在开始时将其传递给您。

ActivityManager(myActivityMap, ClientFactory.INSTANCE.getEventBus());

...

public class MyActivity extends AbstractActivity implements ContextChangedEvent.Handler
{
public MyActivity()
{
}

@override
public void onContextChanged()
{
// do Stuff
}

@override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
eventBus.addHandler(ContextChangedEvent.TYPE, this);
}
}

如果您使用在“开始”时传递给您的 eventBus,ActivityManager 会自动为您清除附加到它的处理程序。

此外,我建议在您的工厂中构建一个 SimpleEventBus 而不是 ResettableEventBus。当前版本的 ResettableEventBus 中存在一个错误,如果嵌套它会导致问题(内存泄漏)。

http://code.google.com/p/google-web-toolkit/issues/detail?id=5700

这更像是一个 FYI。也不要从传入的事件总线中手动删除任何处理程序。这是由与上述相同的错误引起的。

关于java - GWT 2.1 : ResettableEventBus doesn't reset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4735970/

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