2011-08-03 12 views
5

Estoy haciendo una aplicación para Android que tendrá dos servicios que seguirán enviando datos sobre el uso del teléfono por el usuario cada 24 horas.Servicios de Android: consideraciones del ciclo de vida

El usuario debe ejecutar la aplicación, alternar los botones para permitir el registro del uso del teléfono y luego el usuario debería poder llevar una vida normal con su teléfono, hasta que vuelva a iniciar la aplicación y deshabilite el alternar botón para detener el registro de la información.

  • ¿Qué consideraciones debo tener sobre el ciclo de vida de los servicios?
  • ¿Qué ocurre con la interacción del usuario con el teléfono mientras los servicios deberían enviar los datos?

Toda la información es muy apreciada, ya que mi mente se está abrumando con todo esto.

¡Muchas gracias de antemano a todos!

Respuesta

8

El servicio se puede cortar en cualquier momento a través del menú de configuración. También puede ser aniquilado en cualquier momento por Android si decide que necesita los recursos para la actividad actualmente en ejecución. onDestroy() se llamará sin importar, así que úselo para almacenar cualquier cosa que necesite.

El servicio se ejecuta en segundo plano pero a través del hilo de la interfaz de usuario principal. Por lo tanto, es posible bloquear el funcionamiento del teléfono a través de un servicio. Parece que el teléfono está bloqueado cuando en realidad es un servicio que intenta hacer algo. Se debe usar cualquier procedimiento de bloqueo en un hilo como el temporizador Java, el hilo Java o AsyncTask.

Solo puede haber una versión en ejecución del servicio en un momento dado. Sin embargo, llamar al startService(myService) si "myService" ya se está ejecutando, básicamente anulará el servicio en ejecución actual y se volverá a llamar al onStartCommand(). Sin embargo, se necesita una llamada a stopService(myService) para detenerla sin importar cuántas veces se llamó a startService(myService).

stopService(myService) no detendrá un servicio si el servicio está limitado a algo. Esperará hasta que se eliminen todas las vinculaciones antes de que se detenga el servicio.

+0

¡Muchas gracias! Pero, por ejemplo: digamos que el usuario habilita el registro y luego mata la aplicación (cerrándola o simplemente haciendo que pierda el foco y sea asesinado por Android). ¿Cómo puedo hacer eso cuando la aplicación se inicia de nuevo, obtiene el estado del servicio (ya sea que se ejecute o no) y basado en esto, establece el estado del botón en activo o inactivo? – noloman

+1

Nunca tuve que hacer eso yo mismo. Parece que se ha discutido aquí sin embargo. http://stackoverflow.com/questions/600207/android-check-if-a-service-is-running. Simplemente cambie su estado persistente a "habilitado" en el método onStartCommand() y "deshabilitado" en el método onDestroy(). Luego puede verificarlo cuando abra la aplicación. – DeeV

+0

perfecto, ¡eso es lo que necesitaba! Muchas gracias =) – noloman

Cuestiones relacionadas