Modalità sospensione

Stati di alimentazione del SoC

Gli stati di alimentazione del system on a chip (SoC) sono: attivo, inattivo e in sospensione. "On" indica che il SoC è in esecuzione. "Inattivo" è una modalità di consumo medio in cui il SoC è alimentato, ma non esegue alcuna attività. "Sospendi" è una modalità a basso consumo in cui il SoC non è alimentato. Il consumo energetico del dispositivo in questa modalità è in genere 100 volte inferiore rispetto alla modalità "On".

Sensori non di riattivazione

I sensori non risveglianti sono sensori che non impediscono al SoC di entrare in modalità sospensione e non lo riattivano per segnalare i dati. In particolare, i driver non sono autorizzati a mantenere i wake-lock. È responsabilità delle applicazioni mantenere un blocco parziale dell'attivazione se vogliono ricevere eventi da sensori non di attivazione quando lo schermo è spento. Mentre il SoC è in modalità sospensione, i sensori devono continuare a funzionare e generare eventi, che vengono inseriti in una coda FIFO hardware. Per ulteriori dettagli, consulta la sezione Raggruppamento. Gli eventi nella FIFO vengono inviati alle applicazioni quando il SoC si riattiva. Se la coda FIFO è troppo piccola per memorizzare tutti gli eventi, gli eventi precedenti vengono persi; i dati più vecchi vengono eliminati per fare spazio ai dati più recenti. Nel caso estremo in cui la coda FIFO non esista, tutti gli eventi generati mentre il SoC è in modalità di sospensione andranno persi. Un'eccezione è l'ultimo evento di ogni sensore on-change: l'ultimo evento deve essere salvato al di fuori della coda FIFO in modo che non possa essere perso.

Non appena il SoC esce dalla modalità di sospensione, tutti gli eventi della coda FIFO vengono segnalati e le operazioni riprendono normalmente.

Le applicazioni che utilizzano sensori non di risveglio devono mantenere un blocco di risveglio per assicurarsi che il sistema non entri in sospensione, annullare la registrazione dai sensori quando non ne hanno bisogno o aspettarsi di perdere eventi mentre il SoC è in modalità di sospensione.

Sensori di riattivazione

A differenza dei sensori non di risveglio, i sensori di risveglio assicurano che i dati vengano inviati indipendentemente dallo stato del SoC. Quando il SoC è attivo, i sensori di risveglio si comportano come i sensori non di risveglio. Quando il SoC è in modalità di sospensione, i sensori di attivazione devono riattivarlo per inviare gli eventi. Devono comunque consentire all' SoC di entrare in modalità di sospensione, ma devono anche risvegliarlo quando è necessario segnalare un evento. In altre parole, il sensore deve riattivare il SoC e inviare gli eventi prima che sia trascorsa la latenza massima dei report o che la coda FIFO hardware sia piena. Per ulteriori dettagli, consulta la sezione Raggruppamento.

Per assicurarsi che le applicazioni abbiano il tempo di ricevere l'evento prima che il SoC riattivi la modalità di sospensione, il driver deve mantenere un "blocco sveglia con timeout" per 200 millisecondi ogni volta che viene registrato un evento. In altre parole, al SoC non deve essere consentito di tornare in modalità di sospensione nei 200 millisecondi successivi a un'interruzione di risveglio. Questo requisito scomparirà in una release futura di Android e fino ad allora avremo bisogno di questo blocco di riattivazione con timeout.

Come definire i sensori di risveglio e non risveglio?

Fino a KitKat, la distinzione tra un sensore di attivazione e uno di disattivazione era determinata dal tipo di sensore: la maggior parte era di tipo di disattivazione, ad eccezione del sensore di prossimità e del rilevatore di movimento significativo.

A partire dalla versione L, la presenza o meno di un sensore di attivazione è specificata da un flag nella definizione del sensore. La maggior parte dei sensori può essere definita da coppie di varianti di attivazione e non attivazione dello stesso sensore, nel qual caso devono comportarsi come due sensori indipendenti che non interagiscono tra loro. Per ulteriori dettagli, consulta la sezione Interazione.

Se non diversamente specificato nella definizione del tipo di sensore, è consigliabile implementare un sensore di riattivazione e un sensore non di riattivazione per ogni tipo di sensore elencato in Tipi di sensori. In ogni definizione del tipo di sensore, controlla quale sensore (risveglio o non risveglio) verrà restituito da SensorManager.getDefaultSensor(sensorType). È il sensore che verrà utilizzato dalla maggior parte delle applicazioni.