Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Mode suspendu

États d'alimentation SoC

Les états d'alimentation du système sur une puce (SoC) sont: allumé, inactif et suspendu. «On» est lorsque le SoC fonctionne. «Idle» est un mode de puissance moyenne dans lequel le SoC est alimenté mais n'effectue aucune tâche. «Suspendre» est un mode basse consommation dans lequel le SoC n'est pas alimenté. La consommation électrique de l'appareil dans ce mode est généralement 100 fois inférieure à celle du mode «Marche».

Capteurs sans réveil

Les capteurs sans réveil sont des capteurs qui n'empêchent pas le SoC de passer en mode veille et ne réveillent pas le SoC pour signaler des données. En particulier, les conducteurs ne sont pas autorisés à tenir des verrous de réveil. Il est de la responsabilité des applications de conserver un verrouillage de réveil partiel si elles souhaitent recevoir des événements de capteurs sans réveil lorsque l'écran est éteint. Pendant que le SoC est en mode veille, les capteurs doivent continuer à fonctionner et à générer des événements, qui sont placés dans une FIFO matérielle. (Voir Batching pour plus de détails.) Les événements du FIFO sont livrés aux applications lorsque le SoC se réveille. Si la FIFO est trop petite pour stocker tous les événements, les événements les plus anciens sont perdus; les données les plus anciennes sont supprimées pour accueillir les dernières données. Dans le cas extrême où le FIFO est inexistant, tous les événements générés alors que le SoC est en mode suspension sont perdus. Une exception est le dernier événement de chaque capteur lors du changement: le dernier événementdoit être enregistré en dehors de la FIFO pour ne pas être perdu.

Dès que le SoC sort du mode de suspension, tous les événements du FIFO sont signalés et les opérations reprennent normalement.

Les applications utilisant des capteurs sans réveil doivent soit maintenir un verrou de réveil pour s'assurer que le système ne se suspend pas, se désinscrire des capteurs lorsqu'ils n'en ont pas besoin, ou s'attendre à perdre des événements lorsque le SoC est en mode de suspension.

Capteurs de réveil

Contrairement aux capteurs sans réveil, les capteurs de réveil garantissent que leurs données sont délivrées indépendamment de l'état du SoC. Lorsque le SoC est éveillé, les capteurs de réveil se comportent comme des capteurs sans réveil. Lorsque le SoC est en veille, les capteurs de réveil doivent réveiller le SoC pour délivrer des événements. Ils doivent toujours laisser le SoC passer en mode veille, mais doivent également le réveiller lorsqu'un événement doit être signalé. Autrement dit, le capteur doit réveiller le SoC et fournir les événements avant que la latence de rapport maximale ne se soit écoulée ou que la FIFO matérielle soit pleine. Voir Batching pour plus de détails.

Pour s'assurer que les applications ont le temps de recevoir l'événement avant que le SoC ne se rendorme, le pilote doit maintenir un «timeout wake lock» pendant 200 millisecondes à chaque fois qu'un événement est signalé. Autrement dit, le SoC ne devrait pas être autorisé à se rendormir dans les 200 millisecondes suivant une interruption de réveil. Cette exigence disparaîtra dans une future version d'Android, et nous avons besoin de ce verrou de réveil de délai d'expiration d'ici là.

Comment définir les capteurs de réveil et de non réveil?

Jusqu'à KitKat, le fait qu'un capteur soit un capteur de réveil ou un capteur sans réveil était dicté par le type de capteur: la plupart étaient des capteurs sans réveil, à l'exception du capteur de proximité et du détecteur de mouvement significatif .

À partir de L, le fait qu'un capteur donné soit un capteur de réveil ou non est spécifié par un indicateur dans la définition du capteur. La plupart des capteurs peuvent être définis par des paires de variantes de réveil et de non-réveil du même capteur, auquel cas ils doivent se comporter comme deux capteurs indépendants, n'interagissant pas l'un avec l'autre. Voir Interaction pour plus de détails.

Sauf indication contraire dans la définition du type de capteur, il est recommandé de mettre en œuvre un capteur de réveil et un capteur de non-réveil pour chaque type de capteur répertorié dans Types de capteur . Dans chaque définition de type de capteur, voyez quel capteur (avec ou sans réveil) sera renvoyé par SensorManager.getDefaultSensor(sensorType) . C'est le capteur que la plupart des applications utiliseront.