Stati di alimentazione del SoC
Gli stati di alimentazione del sistema su un chip (SoC) sono: acceso, inattivo e sospeso. "On" è quando il SoC è in esecuzione. "Idle" è una modalità di consumo medio in cui il SoC è alimentato ma non esegue alcuna attività. "Suspend" è una modalità a basso consumo in cui il SoC non è alimentato. Il consumo energetico del dispositivo in questa modalità è solitamente 100 volte inferiore rispetto alla modalità "On".
Sensori di non risveglio
I sensori di non riattivazione sono sensori che non impediscono al SoC di entrare in modalità di sospensione e non riattivano il SoC per segnalare i dati. In particolare, ai conducenti non è consentito tenere il wakelock. È responsabilità delle applicazioni mantenere un wakelock parziale nel caso in cui desiderino ricevere eventi da sensori non di riattivazione mentre lo schermo è spento. Mentre il SoC è in modalità di sospensione, i sensori devono continuare a funzionare e generare eventi, che vengono inseriti in una FIFO hardware. (Vedi Batch per maggiori dettagli.) Gli eventi nel FIFO vengono consegnati alle applicazioni quando il SoC si riattiva. Se la FIFO è troppo piccola per memorizzare tutti gli eventi, gli eventi più vecchi andranno perduti; i dati più vecchi vengono eliminati per accogliere i dati più recenti. Nel caso estremo in cui il FIFO è inesistente, tutti gli eventi generati mentre il SoC è in modalità di sospensione vengono persi. Un'eccezione è l'ultimo evento di ciascun sensore in variazione: l'ultimo evento deve essere salvato al di fuori del FIFO in modo che non possa essere perso.
Non appena il SoC esce dalla modalità di sospensione, tutti gli eventi del FIFO vengono segnalati e le operazioni riprendono normalmente.
Le applicazioni che utilizzano sensori non di riattivazione dovrebbero mantenere un wakelock per garantire che il sistema non vada 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 sveglia
A differenza dei sensori non di riattivazione, i sensori di riattivazione assicurano che i dati vengano forniti indipendentemente dallo stato del SoC. Mentre il SoC è attivo, i sensori di risveglio si comportano come sensori di non risveglio. Quando il SoC è inattivo, i sensori di riattivazione devono riattivare il SoC per fornire eventi. Devono comunque lasciare che il SoC entri in modalità di sospensione, ma devono anche riattivarlo quando è necessario segnalare un evento. Cioè, il sensore deve riattivare il SoC e fornire gli eventi prima che sia trascorsa la massima latenza di reporting o che la FIFO hardware si riempia. Vedi Batch per maggiori dettagli.
Per garantire che le applicazioni abbiano il tempo di ricevere l'evento prima che il SoC torni in modalità di sospensione, il driver deve mantenere un "timeout wakelock" per 200 millisecondi ogni volta che viene segnalato un evento. Cioè, al SoC non dovrebbe essere permesso di tornare in modalità di sospensione nei 200 millisecondi successivi a un'interruzione di riattivazione. Questo requisito scomparirà in una futura versione di Android e fino ad allora avremo bisogno di questo wakelock di timeout.
Come definire i sensori di risveglio e di non risveglio?
Fino a KitKat, se un sensore fosse di risveglio o di non risveglio dipendeva dal tipo di sensore: la maggior parte erano sensori di non risveglio, ad eccezione del sensore di prossimità e del rilevatore di movimento significativo .
A partire da L, se un dato sensore è un sensore di sveglia o meno è specificato da un flag nella definizione del sensore. La maggior parte dei sensori può essere definita da coppie di varianti di risveglio e non di risveglio dello stesso sensore, nel qual caso devono comportarsi come due sensori indipendenti, senza interagire tra loro. Vedi Interazione per maggiori dettagli.
Se non diversamente specificato nella definizione del tipo di sensore, si consiglia di implementare un sensore di riattivazione e un sensore di non riattivazione per ciascun tipo di sensore elencato in Tipi di sensori . In ogni definizione del tipo di sensore, vedere quale sensore (riattivazione o non riattivazione) verrà restituito da SensorManager.getDefaultSensor(sensorType)
. È il sensore utilizzato dalla maggior parte delle applicazioni.