Я хочу понять концепцию обратного вызова. Я искал в Интернете о обратных вызовах, и есть много примеров с использованием интерфейса, а один класс вызывает метод другого класса с использованием этого интерфейса. Но все же я не могу получить основную концепцию обратных вызовов, какова цель использования обратных вызовов?
Что такое обратный вызов в Android?
Ответ 1
Вот хороший учебник, в котором описаны обратные вызовы и сценарий использования.
Концепция обратных вызовов - информировать класс синхронно/асинхронно, если выполняется некоторая работа в другом классе. Некоторые называют это Голливудским принципом: "Не называй нас, мы зовем тебя".
Вот пример:
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 обратные вызовы используются f.e. между действиями и фрагментами. Поскольку фрагменты должны быть модульными, вы можете определить обратный вызов в фрагменте для вызова методов в Activity.
Ответ 2
Сначала вы создаете интерфейс, а затем определяете метод, который будет действовать как обратный вызов. В этом примере у нас было бы два класса: один classA и еще один classB
Интерфейс:
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();
}
P.S. У вашего пользовательского прослушивателя может быть столько параметров, сколько вы хотите
Ответ 3
Обратный вызов может быть очень полезным в Java.
Используя обратный вызов, вы можете уведомить другой класс о асинхронном действии, которое завершилось с успехом или ошибкой.
Ответ 4
Это обсуждалось до здесь.
В компьютерном программировании обратный вызов представляет собой часть исполняемого кода, который передается в качестве аргумента другому коду, который, как ожидается, вызовет (выполнит) аргумент в какое-то удобное время. Вызов может быть немедленным, как при синхронном обратном вызове, или может произойти в более позднее время, как при асинхронном обратном вызове.
Ответ 5
CallBack Interface
используются для связи Fragment
- Fragment
в android.
Обратитесь здесь для вашего понимания.
Ответ 6
Я использую в следующем случае: В пользовательском интерфейсе я получил действие от кнопки, например. пользователь хочет загрузить файл размером 500 МБ. Спасибо, я инициализирую фоновый движок (класс AsyncTask) и передаю ему параметры. В пользовательском интерфейсе я покажу диалог блокировки и отключу пользователя делать другие клики. Вопрос в том, когда удалять блокировку из пользовательского интерфейса? ответ: когда двигатель закончил с успехом или неудачно, и это может быть с обратными вызовами или уведомлениями.
В чем разница между уведомлением и обратными вызовами, это другой вопрос, но 1:1 быстрее обратный вызов.