Comprender los métodos de devolución de llamada con ejemplos

Hakim Aldaoub, 3 de Marzo de 2021

En el desarrollo de aplicaciones modernas, el desarrollo dirigido por eventos ha ido ganando popularidad. Los desarrolladores de hoy en día están utilizando ampliamente las devoluciones de llamada sincrónicas y asincrónicas en sus aplicaciones para lograr la flexibilidad. Mientras que el concepto se conoce como Callbacks en la comunidad Java, se llama Delegados en el mundo .NET. Hoy explicaremos los métodos Callback de forma clara, con tres sencillos ejemplos

¿Qué es una devolución de llamada?

Las devoluciones de llamada son un mecanismo en la programación orientada a objetos que permite a una aplicación manejar eventos suscritos, que surgen en tiempo de ejecución, a través de una interfaz de oyente. Los suscriptores tendrán que proporcionar una implementación concreta de los métodos abstractos de la interfaz. De esta manera, cada vez que se active el evento especificado, las acciones predefinidas asociadas a él se ejecutarán en el orden en que fueron definidas.

Ejemplos:

Instancia básica:

En este ejemplo vamos a explicar el concepto de creación de una devolución de llamada en cuatro pasos:
Primero, crea una interfaz de devolución de llamada y declara dentro de ella los métodos a los que se va a llamar. Estos métodos abstractos representan los eventos que desencadenarán los métodos de devolución de llamada en la clase principal.


Llamemos a la interfaz ActionListenerCallback, con los métodos abstractos onActionSuccess y onActionFailure , que serán pasados con una implementación concreta como argumento al setActionListener , a través de una instancia anónima del ActionListenerCallback.

 public interface ActionListenerCallback { public void onActionSuccess(String successMessage; public void onActionFailure(Throwable throwableError); }

Cree la WorkerClass, es la clase que producirá el evento y disparará los métodos de callback apropiados basados en las condiciones predefinidas. La WorkerClass contiene el método setActionListener, que permitirá a los objetos suscriptores enviar sus callbacks como argumento, a través de una interfaz anónima ActionListenerCallback.

 

public class Worker { ActionListenerCallback callBack; public Worker() { //inicializar el objeto callback desde el constructor this.callBack = null; } public void setActionListener(ActionListenerCallback callBack) { this.callBack = callBack; System.out.println("Realizar alguna tarea, antes de invocar el callback"); if (this.callBack!= null) { callBack.onActionSuccess (successMessage); else callBack.onActionFailure (throwableError); } } 

Proporcione la respuesta deseada al evento definiendo los métodos de devolución de llamada en la clase SubscriberActivity. En el código siguiente, el método setActionListeneradjuntará el ActionListenerCallback anónimo al objeto worker, preparándolo para responder cuando se active el evento especificado.

public class SubscriberActivity extends Activity { @Overrideprotected void onCreate(Bundle savedInstanceState) { Worker worker = new Worker (); worker.setActionListener(new ActionListenerCallback () { @Overridepublic void onActionSuccess(StringsuccessMessage) { System.out.println("El evento se ha activado con éxito"); } @Overridepublic void onActionFailure(Throwable throwableError) { System.err.println("Error: " + throwableError.getMessage()); } }); }

Ejemplo de escuchas de devolución de llamadas de Android:

Hemos optado por ofrecer el segundo ejemplo del marco de trabajo de Android debido a su popularidad. Android mantiene la interacción entre el usuario final y la aplicación utilizando el ampliamente utilizado patrón de diseño Listener. Todos los componentes de la interfaz de usuario, como un botón, heredan de la clase View, que a su vez implementa la interfaz Callback del paquete android.graphics.drawable . La clase View contiene todos los escuchadores de eventos para interceptar los distintos eventos de la UI. Cada uno de estos listeners contiene sólo un método de callback.

Echemos un vistazo a uno de los callbacks más utilizados en Android, onClick(), se declara en View.OnClickListenerinterfacecomo se ve a continuación . Cuando el evento de clic ocurra en el respectivo elemento de la UI, el método OnClick( ) se activará y realizará las operaciones definidas por los objetos suscriptores

public static interface OnClickListener() { void onClick(View view); }

A continuación, se define el código de devolución de llamada y se adjunta al botón mediante la interfaz OnClickListener, a la espera de que se active el evento de clic. El elemento de la interfaz de usuario, que es un botón en este ejemplo, utiliza el método setOnClickListener de su superclase View para suscribirse al evento y proporcionar su propia implementación de la función callback.

Button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Overridepublic void onClick(View view) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); startRegistration(); });

Para una referencia completa, a continuación está el setOnClickListener en la clase View.


public void setOnClickListener(@Nullable View.OnClickListener l) { lanza una nueva RuntimeException("¡Stub!");

} 

Ejemplo de devolución de llamada del SDK de orquestación:

Para mantener la capacidad de respuesta de la aplicación integrada, el SDK de orquestación emplea un enfoque asíncrono, en el que el integrador tendrá que proporcionar implementaciones concretas de los métodos de devolución de llamadas para las diferentes actividades proporcionadas por el SDK de orquestación. De esta manera, el objeto integrador se registra con un oyente, y podría continuar su ejecución con otra operación. Cada vez que se produzca un evento, el SDK de orquestación ejecutará el código vinculado a ese evento, incluidos los métodos de devolución de llamada definidos por el desarrollador integrador.

NOTA: Los métodos de devolución de llamada se llaman desde el hilo de la interfaz de usuario en Android, y desde el hilo principal en iOS.

Un ejemplo de la utilización de los métodos de callback de Orchestration SDK se encuentra en la MainActivity dela aplicación de ejemplo. El método sendCommandToServerinstanciará un objeto CommandSender con un objeto anónimo de la CommandSenderCallbackinterface. Este anónimo llevará la implementación concreta tanto de onCommandSendingFailure como de onCommandSendingSuccess. Además, el contexto de la aplicación se proporcionará como argumento al CommandSenderobject.
Siguiendo esta configuración, cada vez que el método de ejecución asíncrona se ejecute en el objeto CommandSender
, los métodos de callback serán llamados en el orden determinado

private void sendCommandToServer(String command) { CommandSender commandSender = new CommandSender(getApplicationContext(), new CommandSenderCallback() { @Overridepublic void onCommandSendingFailure() { UIUtils.hideProgress(progressDialog); UIUtils.displayAlert(MainActivity.this, getString(R.string.dialog_error_title), getString(R.string.dialog_error_content_sending)); } @Overridepublic void onCommandSendingSuccess(String serverCommand) { orchestrator.execute(serverCommand); }); commandSender.execute(command);

Este tutorial fue un punto de entrada para el concepto de métodos de devolución de llamada, destinado a proporcionar una comprensión básica del flujo entre las diferentes actividades de OneSpan Mobile Security Suite. Nos basaremos en este concepto básico cuando profundicemos en este tema, en próximos blogs. Mientras tanto, si tiene alguna pregunta, póngase en contacto con nosotros en los foros del portal de la comunidad de OneSpan.

Comunidad de desarrolladores de OneSpan Sign

Comunidad de desarrolladores de OneSpan Sign

¡Únase a la comunidad de desarrolladores de OneSpan Sign! Foros, blogs, documentación, descargas de SDK y más.

Únete hoy