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:
- Android: TextInputLayout no centrará la pista
- Cómo obtener el rectángulo inscrito en un clip de lienzo
- Intercambio compartido de iPhone y Android de Crossplatform
- Dagger 2 actividad inyección no funciona
- No se encontró el archivo de Android- R.java
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?
- Cámara predeterminada para tomar una foto en android
- ¿No se puede resolver la importación de com.google?
- ¿Por qué recibo un error 500 cuando envío datos POST a un sitio ASP.NET MVC a través de Android?
- Cómo bloquear los botones de Android / teléfono de código (bloqueo de pantalla)?
- Simple hilo bloquea la aplicación para Android
- Implementación parcelable con ArrayList <objeto personalizado>
- ActiveAndroid Excepción SQLite 'No such table'
- Eclipse ADT: Java se inició pero devolvió el código de salida = 13
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)
.
- CardView sombra no aparece en Lollipop después de ofuscar con proguard
- Xamarin – desconectado del renderizador de diseño