GWT - Нужно ли вручную удалять собственные обработчики событий при отсоединении / выгрузке? - PullRequest
1 голос
/ 02 апреля 2020

Если виджеты добавляются на панели (DOM), а также собственные обработчики (например, ClickHanlder или MouseDownHandler), без сохранения ссылки на них, необходимо вручную удалять обработчик из регистрации при отсоединении / выгрузке, чтобы избежать памяти утечки или плохое управление памятью?

Пример:

//at first, somewhere locally
Button b = new Button("My button");
b.addClickHandler(new ClickHandler(){...}) // or just (event -> {do stuff here})
globalPanel.add(b); //some generic scope panel

//later that evening...
globalPanel.clear();
//then maybe do other similar stuff, adding widgets and handlers, repeatedly 

Так есть ли необходимость сохранять регистрацию обработчика и удалять его при каком-либо другом вызове onDetach / onUnload? Потому что в этом случае нет ссылки на кнопку "b" или обработчик щелчка.

Спасибо.

1 Ответ

4 голосов
/ 03 апреля 2020

Вам не нужно удалять обработчик.

GWT на самом деле делает гораздо больше, он использует битовые поля для приема события DOM, чтобы исправить некоторые старые проблемы браузеров с ссылками cycli c , Хотя в настоящее время это бесполезно, все браузеры корректно обрабатывают циклические ссылки c. Больше информации в этой статье > 10 лет .

...