Creación de un manejador de devolución de llamada para manejar varias devoluciones de llamada en Android

Tengo una aplicación de Android que las interfaces de hardware de terceros a través de una biblioteca suministrada por el proveedor. Cuando los datos del hardware están listos para ser procesados, la biblioteca vuelve a llamar a mi aplicación.

La biblioteca de terceros, debido a su diseño, sólo hace una devolución de llamada a la aplicación. Sin embargo, mi aplicación tiene algunas tareas asíncronas diferentes que le gustaría hacer cuando se llama a la devolución de llamada (por ejemplo, registrar, actualizar la pantalla de interfaz de usuario, llamar a programas externos). Tratando de ventilar el evento, en cierto modo, a diferentes métodos. Por lo tanto, estoy pensando en hacer esto en mi clase de aplicación:

interface MyCallback { public void doSomething(ArrayList<DataClass>); } public class MyApp extends Application { ... private MyCallback cb; public void registerCallback (MyCallback callback) { cb = callback; } public methodCalledBy3rdPartyAPIOnData (ArrayList<DataClass> data){ cb.doSomething(ArrayList<DataClass> data); } 

Que funcionaría para un solo método de llamada, pero estoy teniendo un problema sobre cómo hacer esto para una serie de callbacks … y asegurarse de que se llaman asincrónicamente. ¿Hay ejemplos o prácticas recomendadas para hacer este tipo de cosas en una aplicación de Android, o en Java en general?

Yo usaría un patrón de observador ligeramente adaptado (la adaptación es notificar a cada observador en un nuevo hilo):

Su manejador de devolución de llamada es el sujeto (es decir, se observa):

 public class Subject { private List<Observer> observers = new ArrayList<>(); public void registerObserver(Observer observer) { observers.add(observer); } public void notifyObservers(Object data) { for (final Observer observer : observers) { new Thread(new Runnable() { @override public void run() { observer.notify(data); } }).start(); } } public methodCalledBy3rdPartyAPIOnData (ArrayList<DataClass> data){ notifyObservers((Object)data); } } 

Y cada uno de los manejadores reales necesita implementar la siguiente interfaz

 public interface Observer { public void notify(Object data); } 

Y regístrese llamando a subject.registerObserver(this) .

  • Error de pelusa en Okio
  • Aplicación para Android Just After Boot
  • Mostrando todos los eventos de difusión en Android
  • Recortar o reemplazar todas las comas y espacios de la cadena
  • Java.lang.NoClassDefFoundError: android.support.v4.content.LocalBroadcastManager aplicación facebook android
  • ¿Dónde está un código de ejemplo / tutorial de Viewpager que funciona bien para todos?
  • FragmentPagerAdapter muestra todo el contenido del fragmento en la primera página
  • Android - Cómo manejar el toque de dos dedos
  • Problemas al configurar el entorno de prueba de App Engine
  • El método getString (int) no está definido para el tipo Apps
  • Android editar contacto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.