2011-02-25 21 views
10

estoy usando¿Cuál es la definición de dormido para un dispositivo Android?

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, 0, DURATION, broadcast); 

Para programar una tarea que se repite que sólo debe ser ejecutada si el dispositivo no está dormido. Según entiendo el API en AlarmManager, se llamará a la intención una vez que el dispositivo se despierte.

¿Cuándo está durmiendo un dispositivo Android? Para las pruebas establecí la duración en dos minutos y conecté el dispositivo a mi máquina. Ahora estoy viendo logcat y cada dos minutos escupirá mi mensaje de depuración.

Siempre pensé que una pantalla desactivada significa que los dispositivos comienzan a dormir. ¿O estoy mirando la salida de depuración que impide que el dispositivo se quede dormido? También desconecté la conexión USB y miré el registro después de media hora y pude ver una llamada a mi código del temporizador, incluso si la pantalla estaba oscura durante más de 15 minutos.

¿Cómo puedo verificar desde qué momento el comando ya no se ejecuta y a qué se refiere el modo dormido en la documentación de AlarmManager? ¿Hay alguna manera de ver desde la salida de logcat cuando el dispositivo comenzó a dormir?

Respuesta

7

El dispositivo está inactivo cuando no se está ejecutando la aplicación que le impide dormir. Entonces: 1. La pantalla está apagada (mientras está encendida, siempre hay alguna aplicación en ejecución, por ejemplo, Lanzador) 2. No hay un servicio en ejecución (por ejemplo, música, descargas): no hay bloqueos de la CPU.

AlarmManager despierta el dispositivo de la suspensión, ejecuta lo que se va a ejecutar. Es crítico, p. para finalizar un servicio que se creó en el receptor de difusión de la alarma para permitir que el dispositivo se duerma nuevamente. Si haces algo más largo e importante en segundo plano, deberías adquirir un bloqueo de CPU para tu aplicación para evitar que sea destruido por el sistema operativo Android.

¿Qué quiere decir exactamente con "¿Cómo puedo verificar desde qué momento el comando ya no se ejecuta?" ¿Qué comando?

De JavaDoc:

alarmas registrados son retenidos mientras el dispositivo está dormido (y puede despertar opcionalmente el dispositivo hacia arriba si se apagan durante ese tiempo), pero será se aclaró si se trata de apagado y reiniciado.

Así que el sistema operativo mantiene todas las alarmas, el dispositivo puede ser despertado por la alarma que se activa mientras duerme. Las alarmas se eliminan después de reiniciar (debe mantenerlas en DB y restaurarlas después del reinicio).

"¿Hay alguna manera de ver desde la salida de logcat cuando el dispositivo se puso a dormir?" Como ya sé que no es, sólo puedo ver algo así cuando la pantalla se apaga:

*** set_screen_state 0 de 'etiqueta de poder'

mi humilde opinión usted no debe preocuparse por el modo de reposo, simplemente hacer que su aplicación "buen ciudadano Android" manejando la pantalla apagada y en intentos (Intent.ACTION_SCREEN_OFF) si es necesario, terminando los servicios lo antes posible, liberando recursos (red, GPS, CPU) lo antes posible, usando alarmas inexactas, gestor de descargas y todo el buen personal traído por OS. Creo que Android maneja la CPU duerme de forma transparente.

8

Una pantalla que está apagada, no necesariamente indica un dispositivo para dormir. Las aplicaciones pueden solicitar bloqueos por activación que mantendrán el dispositivo en funcionamiento mientras la pantalla esté apagada. Si otra aplicación tiene un temporizador que no usa repetición inexacta, entonces el dispositivo se despertará también.

Dependiendo de la versión de Android en su dispositivo, puede encontrar un cuadro de su tiempo de vigilia en Configuración -> Acerca del teléfono -> Uso de la batería -> Luego haga clic en el gráfico superior. Más información sobre los bloqueos por activación se puede encontrar en http://developer.android.com/reference/android/os/PowerManager.html

Cuestiones relacionadas