Monday, October 20, 2008

Services Android

Llevo días, por no decir semanas con fallos en mi aplicación android y sin ser capaz de saber porqué falla.
Todo el tema de servicios en Android a mi gusto esta muy confuso.

Primero hay que diferenciar Servicios locales o Remotos, locales corren en el mismo proceso y remotos pueden correr en cualquier otro. Yo en iCua empecé con Locales por problemas con los remotos, pero por funcionalidad me he tenido que pasar a los Remotos.

Una vez tenemos eso podemos iniciarlos y detenrlos con mas o menos dificultad, pero hay que definir una interface si queremos poder interactuar con el servicio desde cualquier aplicación. Esto se hace mediante aidl, la verdad que sobre aidl ningun problema, todo parece bastante claro.

El Problema lo he tenido siempre al hacer el "bind" y usarlo mediante la interfaz... siempre me petaba la aplicacion o en su defecto lo hacia algunas veces que es todavia peor.

Al ejecutar un metodo del servicio justo despues de hacer bind, no tenia en cuenta que bind es asincrono, asi que a veces se da el caso que android le da preferencia a la actividad y continua con el flujo en el que estaba y este llama al metodo de la interfaz encontrandose con el servicio no disponible y petando todo. Esto pasa en el emulador, y se puede solucionar con un sleep de al menos 4-5 segundos, pero queda claro que en aplicacion real se va a tener que hacer un bucle de espera, ya que vete a saber que tal se maneja el procesador de los HTC.... es un punto feo por el que puede petar o puede que no.

No comments: