С 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, переданный вам в «start», ActivityManager автоматически очистит обработчики, которые вы к нему подключили, автоматически.
Также я бы предложил создать SimpleEventBus на вашей фабрике вместо ResettableEventBus. В текущей версии ResettableEventBus есть ошибка, которая вызывает проблему, если вы ее вкладываете (утечка памяти).
http://code.google.com/p/google-web-toolkit/issues/detail?id=5700
Это больше похоже на ваше мнение. Также не удаляйте обработчики вручную из переданной в eventbus. Это вызвано той же ошибкой, что и выше.