¿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.

¿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,

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.

  • Cómo decidir de qué actividad venimos?
  • Compruebe la conexión a Internet de INTENT
  • Abrir Google Plus Página Via Intent en Android
  • Abra la cámara usando la intención
  • Cómo detectar el estado de sincronización automática cambiado a través del receptor de difusión
  • Android Objetivo de lanzar la aplicación Google+ en la pantalla de Google+ Comunidad
  • Intent.ACTION_CALL inicia una llamada skype en lugar de una llamada telefónica "normal"
  • FLAG_ACTIVITY_CLEAR_TOP y onActivityResult
  • selector personalizado de Android
  • Abrir la actividad de Android en una nueva tarea sin usar android: launchMode = "singleTask"
  • Actividad de superusuario no encontrada
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.