Чем отличается колбэк от слушателя?

271
25 сентября 2017, 01:32

Например, чтобы обработать нажатие на Button необходимо воспользоваться методом setOnClickListener передав оному OnClickListener (слушатель). И такой Listener много где встречается.

А вот, у Google Maps, например, есть метод getMapAsync, в который надо передать OnMapReadyCallback.

Чем отличается Listener от Callback?

Answer 1

Слушатель, по сути, это и есть callback.

Я не буду объяснять, для чего нужны коллбэки, почему их используют в асинхронном программировании, и всё такое прочее.

Но вы видимо не совсем поняли: слушатель это просто обычный коллбэк, вы передаете его какому-то обработчику, этот коллбэк там где-то регистрируется и в последствии может быть неоднократно вызван.

Тот же пример, который вы привели - OnClickListener - это обычный интерфейс, и в случае нажатия пользователем на ваш элемент, будет вызван определенный метод.

Где-то происходит "прослушка" событий, и, как только событие произошло, оно будет "услышано". На разные события есть свои "слушатели", которые на них реагируют. И, в случае если коллбэк (слушатель) передан и событие произошло, будет вызван нужный метод - например, тот же onClick у слушателя нажатий, и вы сможете это событие обработать.

Answer 2

Принципиально ничем. Единственное заметное отличие в том, что обычно есть возможность зарегистрировать множество слушателей, но функцию обратного вызова можно использовать только одну.

Answer 3

Listener принято называть интерфейсы обратного вызова, ответственные за реакцию на действия, как нажатия кнопки.

Callback - интерфейсы обратного вызова, ответственные за реакцию на события, как завершение получения данных.

Стоит заметить, что разделение это весьма условно и вполне может не соблюдаться какими то разработчиками.

По сути реализации это один и тот же механизм интерфейса обратного вызова и в этом плане у них отличий нет.

READ ALSO
JAVA - Можно ли создать exe файл?

JAVA - Можно ли создать exe файл?

Можно ли создать exe файл в JAVA? И можно ли будет его запрограммировать?

288
Передать переменную в PHP

Передать переменную в PHP

Здравствуйте имеется такой скрипт, как передать значения отсюда

318
Как обновить div через AJAX

Как обновить div через AJAX

На сайте есть блок с контентом который приходит средствам API с другого сервераИ чтобы увидеть изминение этого контента постоянно нужно обновлять...

281