Lanzar una excepción personalizada de un servicio a una actividad
Actualmente estoy trabajando en una aplicación XMPP 'en Android y estoy pensando en la mejor manera de lanzar un tipo diferente de Excepción que una RemoteException a mi actividad de mi servicio.
Como parece imposible lanzar otra cosa que una RemoteException usando IPC (no se puede declarar a tirar nada en su .aidl), sólo veo dos soluciones:
- Si un servicio vinculado o hilos personalizados cuando descarga algo?
- ¿Puede Android ServiceTestCase <MyService> enviar mensajes a mi servicio?
- En servicio de facturación de aplicaciones que se mueren a veces
- ¿Puede existir un servicio de fondo sin su aplicación principal?
- IOS equivalente al servicio de Android?
-
Crear un oyente para mi actividad para escuchar en mi excepción XMPP personalizado, que de hecho no se lanzará, sino que sólo se envía como un objeto habitual implementar el protocolo Parcelable.
-
Coge mi XMPPException y lanzar una RemoteException (con un contenido actualizado con mi XMPPException) – Pero en ese caso, ¿cómo podría saber en mi actividad si se trata de una XMPP o una RemoteException real? Marcando el nombre de la excepción y analizándolo en mi actividad? Sería realmente gore.
Tiene alguna idea ? ¿He extrañado algo de la documentación del SDK?
Gracias.
- Android Service.startForeground NO respeta la id unicidad de notificación
- No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare () en CountDownTimer
- Cómo saber si el usuario está en la pantalla de bloqueo desde el servicio
- Descubrimiento del servicio de red error de tutorial android: Servicio perdido, el teléfono se desactiva
- Recolector de datos de sensor de fondo en Android
- Cómo ensayar un servicio de Android que depende de una conexión de red
- Facturación en aplicaciones de Android y servicio bindService
- Notificación diaria de Android
Si # 1 significa lo que creo que hace, usaría eso: haga que el servicio capture la excepción y llame a un método en un objeto de devolución de llamada definido por AIDL creado y suministrado por la actividad.
Puedes ver un ejemplo de esa técnica en este proyecto de cliente y servicio , de uno de mis libros.
Parece que podemos lanzar excepciones personalizadas derivadas de RemoteException. Así que puede tener XMPPRemoteException, o simplemente un MyRemoteException genérico que mantendrá la excepción original. A continuación se muestra una demostración para el segundo caso:
Servidor:
try { ... } catch(XMPPException e) { throw new MyRemoteException(e); }
Cliente:
try { service.someCall(); } catch(MyRemoteException e) { rethrow(e); }
Método auxiliar:
private void rethrow(MyRemoteException e) throws Exception { if(e.innerException instanceof XMPPException) throw (XMPPException)e.innerException; else throw e.innerException; }
Excepción:
public class MyRemoteException extends RemoteException { private static final long serialVersionUID = 1L; public Exception innerException; public MyRemoteException() {} public MyRemoteException(Exception innerException) { this.innerException = innerException; } }
- Excluir paquetes de proguard
- Diferentes dibujables basados en la variante de construcción en Gradle