2010-02-23 11 views
9

Estoy haciendo una investigación de consumo de batería en el teléfono Android. Quiero ejecutar un Battery Check cada 10 minutos hasta que la batería muera totalmente. He estado teniendo problemas para que funcione.Ejecutar un servicio en el fondo para siempre ..? Android

En mi primer intento, utilizo un temporizador en una clase de servicio, y programo el control de la batería cada 10 minutos. Pero pronto descubrí que el servicio se detuvo cuando la pantalla se apaga.

Luego trato de usar AlarmService, utilizo una llamada de alarma para reactivar mi servicio cada 10 minutos y para verificar el nivel de la batería y guardar los datos en un archivo en la tarjeta SD. Funciona con la pantalla apagada. Sin embargo, solo obtuve datos de 9 horas ... parece que el AlarmService se detiene en algún momento después de varias horas. No sé por qué es así, ¿el sistema lo mató por problemas de memoria?

Así que mi pregunta es, ¿alguien ha escrito algún servicio para ejecutar (como siempre) en el fondo antes? ¿Cómo lo haces y agradecería mucho por un código de muestra?

Actualmente estoy leyendo algunos mensajes que dicen que hay un bloqueo parcial de vigilia que puedo usar para mantener el servicio vivo. ¿Es esta la forma correcta de hacerlo?

Muchas gracias y espero poder obtener algunas respuestas útiles aquí.

Respuesta

10

En mi primer intento, debo utilizar un temporizador en una clase servicio y programar la comprobación batería cada 10 minutos. Pero pronto encontré que el servicio se detuvo cuando la pantalla se apaga.

Probablemente no tengas un WakeLock, por lo que el dispositivo se durmió.

parece que el AlarmService detiene en algún momento después de varias horas

lo dudo.

Así que mi pregunta es, ¿alguien ha escrito algún servicio para funcionar (como siempre) en el fondo antes?

No es posible crear un servicio que se ejecutará para siempre. Debería ser posible crear una tarea programada a través del AlarmManager que se invocará "para siempre".

actualmente estoy leyendo algunos mensajes diciendo que hay un bloqueo parcial estela puedo usar para mantener el servicio vivo .. es esta la forma correcta de hacer que ?

No estoy seguro de qué es "it". Pero, si desea mantener el dispositivo en funcionamiento, ya sea para su primer acercamiento o simplemente mientras está realizando un trabajo activado por un AlarmManager, debe tener un WakeLock.

Here is a project que hace casi exactamente lo que usted describe para el AlarmManager, menos de comprobar el nivel de la batería, pero utilizando un WakefulIntentService para asegurar el dispositivo se mantiene despierto.Si no puede ejecutar este código hasta que la batería se apague, únase al cw-android Google Group e informe sus hallazgos, y lo echaré un vistazo.

+0

Muchas gracias por la información valiosa, ahora estoy utilizando el bloqueo parcial estela de mantener mi servicio (que utiliza un programador temporizador) vivo. Parece que funciona muy bien, esperaré hasta que la batería se apague y para asegurarme de que no haya ningún problema. ¡Gracias de nuevo! – sunocky

+0

¿El servicio se detiene cuando la pantalla se apaga incluso si el servicio es un servicio en primer plano? – remi

Cuestiones relacionadas