Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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 быстрее обратный вызов.