¿Cómo funcionan internamente los intentos?
Desarrollé una aplicación y ejecuté algunas pruebas. Estas pruebas consisten en enviar datos de un servicio de fondo a otro servicio de fondo. Todos los datos se recibieron cuando la velocidad de transmisión era baja (4 intentes / segundo). Sin embargo, cuando i aumentó la tasa de transmisión (8 y 12 intentes / segundo), algunos datos (típicamente 2- 3%) no fue recibido por el servicio de destino.
Todas las intenciones fueron difundidas y los servicios estaban funcionando localmente.
- Usando intentos para pasar datos entre actividades en android
- Filtro de intenciones para capturar todos los intentos de uso compartido
- Cómo obtener el nombre de usuario, el teléfono y el correo electrónico de PayPal Mobile Payment Library
- Cómo informar al usuario de que necesita instalar otra aplicación de la que dependa mi aplicación
- Convertir el formato de ruta real a Uri en android
¿Puede alguien decirme, cómo el OS trata los intentos y el mecanismo entero trabaja, para encontrar la razón por la cual los datos no fueron recibidos por su receptor?
Atentamente,
- ¿Por qué la aplicación de mensajería recibe mensajes cuando se detiene la aplicación?
- Iniciar Actividad con acción, pero sin categoría
- ¿Cómo programar una llamada?
- Pasar ArrayList <MyObject> entre múltiples actividades
- BroadcastReceiver para ACTION_MEDIA_BUTTON no funciona
- Android EXTRA_MESSAGE no reconocido dentro de Recycler View Adapter
- Diferencia entre el inicio de la categoría y el lanzador de categorías
- ¿Cómo liberar el recurso de micrófono cuando otra aplicación de Android lo necesita?
En primer lugar, prefiero recomendar a enlazar el servicio y luego utilizar Handlers for IPC. Un buen ejemplo se puede encontrar aquí: http://developer.android.com/guide/components/bound-services.html Esto es mucho más rápido y más confiable.
En cómo los intentos trabajan internamente usted puede echar un vistazo en el código fuente: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/app/ContextImpl.java#L893
Estos son los métodos relevantes (puede ver el primer geting llamado desde el método ContextImpl.broadcastIntent (), vea el enlace en la respuesta de Force ):
- ActivityManagerService.broadcastIntent ()
- Que a su vez llama a ActivityManagerService.broadcastIntentLocked ()
Una posible razón es que la comunicación interprocesos de Android es síncrona. El proceso del cliente llamante se bloquea durante la duración de la respuesta del proceso del servidor. Su servicio con el temporizador se bloquea durante períodos de tiempo (muy pequeños), lo que podría resultar en el comportamiento que observó.
Fuente: Android Binder – Android Interprocess Communication de Thorsten Schreiber , p 11 – 13.
EDIT : He mantenido la respuesta publicada porque los comentarios de Chris Stratton y João Nunes son valiosos.
- Sólo con Proguard: No se pudo init DaoConfig => ArrayIndexOutOfBoundsException
- Android Studio necesita reconstruir el proyecto antes de cada ejecución