Что такое обратный вызов в Android?

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

Вот хороший учебник , в котором описаны обратные вызовы и прецеденты.

Концепция обратных вызовов – информировать класс синхронно / асинхронно, если выполняется какая-либо работа в другом классе. Некоторые называют это Голливудским принципом: «Не называй нас, мы зовем тебя».

Вот пример:

class A implements ICallback { MyObject o; B b = new B(this, someParameter); @Override public void callback(MyObject o){ this.o = o; } } class B { ICallback ic; B(ICallback ic, someParameter){ this.ic = ic; } new Thread(new Runnable(){ public void run(){ // some calculation ic.callback(myObject) } }).start(); } interface ICallback(){ public void callback(MyObject o); } 

Класс A вызывает класс B, чтобы выполнить некоторую работу в потоке. Если Thread завершил работу, он будет информировать Class A о обратном вызове и предоставить результаты. Поэтому нет необходимости в опросе или что-то в этом роде. Вы получите результаты, как только они будут доступны.

В Android Callbacks используются fe между действиями и фрагментами. Поскольку фрагменты должны быть модульными, вы можете определить обратный вызов в фрагменте для вызова методов в Activity.

Сначала вы создаете интерфейс, затем определяете метод, который будет действовать как обратный вызов. В этом примере у нас было бы два класса: один класс А и другой класс В

Интерфейс:

 public interface OnCustomEventListener{ public void onEvent(); //method, which can have parameters } 

Сам слушатель в классе B (мы устанавливаем только слушателя в классе B)

 private OnCustomEventListener mListener; //listener field //setting the listener public void setCustomEventListener(OnCustomEventListener eventListener) { this.mListener=eventListener; } 

В классе A, как мы начинаем слушать то, что класс B должен сказать

 classB.setCustomEventListener(new OnCustomEventListener(){ public void onEvent(){ //do whatever you want to do when the event is performed. } }); 

Как мы запускаем событие из класса B (например, нажатие кнопки)

 if(this.mListener!=null){ this.mListener.onEvent(); } 

PS У вашего пользовательского прослушивателя может быть столько параметров, сколько вы хотите

Источник

Обратный вызов может быть очень полезен в Java.

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

Это обсуждалось здесь .

В компьютерном программировании обратный вызов представляет собой часть исполняемого кода, который передается в качестве аргумента другому коду, который, как ожидается, вызовет (выполнит) аргумент в какое-то удобное время. Вызов может быть немедленным, как при синхронном обратном вызове, или может произойти в более позднее время, как при асинхронном обратном вызове.

CallBack Interface используется для обмена Fragment с Fragment в android.

См. Здесь для вашего понимания.

Я использую в следующем случае: В пользовательском интерфейсе я получил действие от кнопки, например. Пользователь хочет загрузить файл размером 500 МБ. Спасибо, что инициализирую фоновый движок (класс AsyncTask) и передаю ему параметры. В пользовательском интерфейсе я покажу диалог блокировки и отключу пользователя делать любые другие клики. Вопрос в том, когда удалять блокировку из пользовательского интерфейса? Ответ: когда двигатель закончил с успехом или неудачно, и это может быть с обратными вызовами или уведомлениями.

В чем разница между уведомлением и обратными вызовами, это еще один вопрос, но 1: 1 быстрее обратный вызов.