Android Remote methods (AIDL) vs Intents – rendimiento y uso de la batería
Mi equipo está trabajando en un proyecto de Android que consiste en varias aplicaciones de Android que intercambian datos (en el mismo teléfono). La idea es tener varias aplicaciones que están recopilando algunos datos y enviar estos datos a la aplicación principal. El principal reto aquí es hacer el intercambio lo más barato posible en términos de carga de la CPU y el uso de la batería.
Hasta donde yo sé, hay dos maneras de lograr comunicaciones entre procesos:
- Android: WebView mejora la velocidad de carga de los archivos html locales
- ¿Cómo configurar el desplazamiento perfomance para webview?
- Recuperar mediante programación los datos de uso de la red de etiquetas en Android
- Map.clear () vs nuevo Mapa: ¿Cuál será mejor?
- Multiple ListAdapters o uno solo, usando filtrado (Android Performance)
- Intenciones y actividades – una actividad capta las intenciones de otro
- Métodos remotos (a través de AIDL)
Me pregunto cuál de estos es más eficiente en los siguientes escenarios:
- Mensajes / llamadas de método muy frecuentes con muy pocos datos enviados / tráfico (por ejemplo, pasando un montón de primitivos)
- Menos frecuentes mensajes / llamadas de método con grandes trozos de tráfico (por ejemplo, recopilar datos y enviar periódicamente unos pocos KB / MB de datos)
- Mensajes / llamadas de método muy frecuentes con grandes trozos de datos intercambiados
Agradecería cualquier ayuda, ya sea en términos de comparación o una referencia / enlace a un punto de referencia.
- ¿Las bibliotecas externas hacen las aplicaciones más lentas?
- Cargando datos de forma eficaz en RecycleView
- Android - E / Surface: queueBuffer: buffer de cola de errores en SurfaceTexture, -22 crash
- ¿Es una buena idea escribir juegos para móviles en ActionScript3 en lugar de Java / Objective-C?
- ¿Alguna manera alrededor del funcionamiento terrible de SecretKeyFactory con LVL y AESObfuscator?
- Iónicos 2 problemas de rendimiento de desplazamiento
- Inicialización perezosa de los kits de tela?
- ¿Tiene Android (en ARM) los contadores de rendimiento de hardware?
Creo que para 1) sería mejor con un servicio remoto y para 2) y 3) sería mejor escribir a los archivos o una base de datos. Los intentos son más frecuentes para la comunicación interprocesos y el inicio de aplicaciones y servicios.
También puede intentar utilizar código nativo para crear una memoria compartida como una opción alternativa. Echa un vistazo a este enlace para más detalles: http://www.androidenea.com/2010/03/share-memory-using-ashmem-and-binder-in.html
Le sugiero que use el mecanismo de sockets de dominio de Unix para abordar el escenario 3). La alta frecuencia hará que el uso de archivos / bases de datos sea complicado, y de acuerdo con esta respuesta , el uso de IPC de Android no se recomienda rendimiento sabio, ya que cada objeto tiene que ser convertido en (y volver de) un paquete que lleva tiempo. También utilizan tubos Unix pero tiene algunas restricciones:
- Cómo crear named pipe (mkfifo) en Android?
- https://groups.google.com/forum/#!topic/android-ndk/lD-V7Nxe5y4
- Cómo usar unix pipes en Android