Estados de energía del SoC
Los estados de energía del sistema en chip (SoC) son: encendido, inactivo y suspendido. "On" es cuando el SoC se está ejecutando. "Inactivo" es un modo de energía medio en el que el SoC está encendido, pero no realiza ninguna tarea. "Suspender" es un modo de bajo consumo en el que el SoC no está encendido. El consumo de energía del dispositivo en este modo suele ser 100 veces menor que en el modo “Activado”.
Sensores que no activan el dispositivo
Los sensores que no activan el SoC son aquellos que no impiden que el SoC entre en modo suspendido ni lo activan para informar datos. En particular, los controladores no pueden mantener bloqueos de activación. Es responsabilidad de las aplicaciones mantener un bloqueo de activación parcial si desean recibir eventos de sensores que no activan la pantalla mientras esta está apagada. Mientras el SoC está en modo suspendido, los sensores deben seguir funcionando y generando eventos, que se colocan en un FIFO de hardware. (consulta Ejecución por lotes para obtener más detalles). Los eventos de la FIFO se entregan a las aplicaciones cuando se activa el SoC. Si el FIFO es demasiado pequeño para almacenar todos los eventos, se pierden los eventos más antiguos, y se descartan los datos más antiguos para dar cabida a los datos más recientes. En el caso extremo en el que no existe la FIFO, se pierden todos los eventos generados mientras el SoC está en modo suspendido. Una excepción es el último evento de cada sensor de cambio: el último evento debe guardarse fuera de la lista FIFO para que no se pierda.
En cuanto el SoC sale del modo de suspensión, se informan todos los eventos de la FIFO y las operaciones se reanudan de forma normal.
Las aplicaciones que usan sensores que no activan el dispositivo deben mantener un bloqueo de activación para garantizar que el sistema no se suspenda, cancelar el registro de los sensores cuando no los necesiten o esperar perder eventos mientras el SoC está en modo suspendido.
Sensores de activación
A diferencia de los sensores que no activan el SoC, 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 los que no activan el SoC. Cuando el SoC está inactivo, los sensores de activación deben activarlo para entregar eventos. Deben permitir que el SoC entre en modo de suspensión, pero también deben activarlo cuando se debe informar un evento. Es decir, el sensor debe activar el SoC y entregar los eventos antes de que transcurra la latencia máxima de informes o se llene el FIFO de hardware. Consulta Ejecución por lotes para obtener más detalles.
Para garantizar que las aplicaciones tengan tiempo para recibir el evento antes de que el SoC vuelva a suspenderse, 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 entrar en modo de suspensión en los 200 milisegundos posteriores a una interrupción de activación. Este requisito desaparecerá en una versión futura de Android, y necesitaremos este bloqueo de activación de tiempo de espera hasta entonces.
¿Cómo se definen los sensores de activación y los que no tienen activación?
Hasta KitKat, el tipo de sensor determinaba si un sensor era de activación o no: la mayoría eran sensores que no activaban el dispositivo, con la excepción del sensor de proximidad y el detector de movimiento significativo.
A partir de L, una marca en la definición del sensor especifica si un sensor determinado es un sensor de activación o no. La mayoría de los sensores se pueden definir con pares de variantes de activación y no activación del mismo sensor, en cuyo caso deben comportarse como dos sensores independientes que no interactúan entre sí. Consulta 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 uno que no lo haga para cada tipo de sensor que se indica en Tipos de sensores. En cada definición de tipo de sensor, consulta qué sensor (activado o no activado) mostrará SensorManager.getDefaultSensor(sensorType)
. Es el sensor que la mayoría de las aplicaciones usarán.