¿Qué es la callback en Android?

Quiero entender el concepto de callback. He buscado en Internet sobre las devoluciones de llamada y hay muchos ejemplos que utilizan la interfaz, y una clase llama a un método de otra clase que utiliza esa interfaz. Pero aún así no puedo obtener el concepto principal de callbacks, ¿cuál es el propósito de usar devoluciones de llamada?

Aquí hay un buen tutorial , que describe bien las devoluciones de llamada y el caso de uso.

El concepto de devoluciones de llamadas es informar a una clase síncrona / asíncrona si se realiza algún trabajo en otra clase. Algunos lo llaman el principio de Hollywood: “No nos llames, te llamamos”.

Aquí hay un ejemplo:

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); } 

La clase A llama a la clase B para realizar un trabajo en un subproceso. Si el subproceso finalizó el trabajo, informará a la clase A sobre la callback y proporcionará los resultados. Entonces no hay necesidad de encuestas o algo así. Obtendrás los resultados tan pronto como estén disponibles.

En Android, las rellamadas se usan fe entre Actividades y Fragmentos. Debido a que los Fragmentos deben ser modulares, puede definir una callback en el Fragmento para llamar a los métodos en la Actividad.

Primero crea una interfaz, luego define un método, que actuaría como una callback. En este ejemplo, tendríamos dos clases, una clase A y otra clase B

Interfaz:

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

el oyente mismo en la clase B (solo configuramos el oyente en la clase B)

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

en la clase A, cómo empezamos a escuchar para cualquier clase que B tenga que contar

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

¿Cómo activamos un evento de clase B (por ejemplo, sobre el botón presionado)

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

PD Tu oyente personalizado puede tener tantos parámetros como quieras

Fuente

La callback puede ser muy útil en Java.

Al utilizar Devolución de llamada puede notificar a otra Clase una acción asíncrona que se ha completado con éxito o error.

CallBack Interface se usa para la comunicación de Fragment a Fragment en Android.

Consulte aquí para su comprensión.

Fue discutido antes aquí .

En la progtwigción de computadoras, una callback es una pieza de código ejecutable que se pasa como un argumento a otro código, que se espera que vuelva a llamar (ejecutar) el argumento en algún momento conveniente. La invocación puede ser inmediata como en una callback sincrónica o puede ocurrir en un momento posterior, como en una callback asincrónica.

Estoy usando en el siguiente caso: en la interfaz de usuario recibí una acción de un botón, por ejemplo. el usuario desea descargar un archivo de 500mb. Gracias inicializaré el motor de fondo (clase AsyncTask) y le pasaré los parámetros. En la interfaz de usuario, mostraré un diálogo de locking de progreso y deshabilitaré al usuario para hacer cualquier otro clic. La pregunta es: ¿cuándo eliminar el locking de la interfaz de usuario? la respuesta es: cuando el motor terminó con éxito o falla, y eso puede ser con devoluciones de llamadas o notificaciones.

Cuál es la diferencia entre notificaciones y devoluciones de llamadas es otra cuestión, pero 1: 1 es más rápido que la callback.