Estados de energía SoC
Los estados de energía del sistema en un chip (SoC) son: encendido, inactivo y suspendido. “Encendido” es cuando el SoC se está ejecutando. "Inactivo" es un modo de potencia media en el que el SoC recibe alimentación pero no realiza ninguna tarea. "Suspender" es un modo de bajo consumo en el que el SoC no recibe alimentación. El consumo de energía del dispositivo en este modo suele ser 100 veces menor que en el modo "Encendido".
Sensores no despertadores
Los sensores que no son de activación son sensores que no evitan que el SoC entre en modo de suspensión y no activan el SoC para informar datos. En particular, los conductores no pueden tener wake-locks. Es responsabilidad de las aplicaciones mantener un bloqueo de activación parcial en caso de que deseen recibir eventos de sensores que no sean de activación mientras la pantalla está apagada. Mientras el SoC está en modo de suspensión, los sensores deben seguir funcionando y generando eventos, que se colocan en un FIFO de hardware. (Consulte Procesamiento por lotes para obtener más detalles). Los eventos en el FIFO se entregan a las aplicaciones cuando el SoC se activa. Si FIFO es demasiado pequeño para almacenar todos los eventos, los eventos más antiguos se pierden; los datos más antiguos se eliminan para adaptarse a los datos más recientes. En el caso extremo en el que FIFO no existe, todos los eventos generados mientras el SoC está en modo de suspensión se pierden. Una excepción es el último evento de cada sensor de cambio: el último evento debe guardarse fuera de FIFO para que no se pierda.
Tan pronto como el SoC sale del modo de suspensión, se informan todos los eventos del FIFO y las operaciones se reanudan con normalidad.
Las aplicaciones que utilizan sensores que no son de activación deben mantener un bloqueo de activación para garantizar que el sistema no se suspenda, anular el registro de los sensores cuando no los necesitan o esperar perder eventos mientras el SoC está en modo de suspensión.
Sensores de despertador
A diferencia de los sensores que no son de activación, los sensores de activación garantizan que sus datos se entreguen independientemente del estado del SoC. Mientras el SoC está activo, los sensores de activación se comportan como sensores que no son de activación. Cuando el SoC está inactivo, los sensores de activación deben activar el SoC para generar eventos. Todavía deben permitir que el SoC entre en modo de suspensión, pero también deben activarlo cuando sea necesario informar un evento. Es decir, el sensor debe activar el SoC y entregar los eventos antes de que haya transcurrido la latencia máxima de informes o el FIFO del hardware se llene. Consulte Lotes para obtener más detalles.
Para garantizar que las aplicaciones tengan tiempo de recibir el evento antes de que el SoC vuelva a dormir, el controlador debe mantener un "bloqueo de activación de tiempo de espera" durante 200 milisegundos cada vez que se informa un evento. Es decir, no se debe permitir que el SoC vuelva a dormir en los 200 milisegundos posteriores a una interrupción de activación. Este requisito desaparecerá en una versión futura de Android, y necesitamos este bloqueo de activación de tiempo de espera hasta entonces.
¿Cómo definir los sensores de activación y no activación?
Hasta KitKat, si un sensor era un sensor de activación o no, lo dictaba el tipo de sensor: la mayoría eran sensores que no eran de activación, con la excepción del sensor de proximidad y el detector de movimiento significativo .
A partir de L, si un sensor determinado es un sensor de activación o no, se especifica mediante una bandera en la definición del sensor. La mayoría de los sensores se pueden definir por pares de variantes de activación y no activación del mismo sensor, en cuyo caso deben comportarse como dos sensores independientes, sin interactuar entre sí. Consulte Interacción para obtener más detalles.
A menos que se especifique lo contrario en la definición del tipo de sensor, se recomienda implementar un sensor de activación y un sensor que no sea de activación para cada tipo de sensor enumerado en Tipos de sensores. En cada definición de tipo de sensor, vea qué sensor (activado o no SensorManager.getDefaultSensor(sensorType)
. Es el sensor que usarán la mayoría de las aplicaciones.