PowerManager (service d'alimentation)


Introduction à cette section :

Cette section expliquera les services système fournis par Android - PowerManager (service d'alimentation) , qui est utilisé Gérez le processeur pour qu'il s'exécute et le clavier ou l'écran pour qu'il s'allume. Cependant, n'utilisez pas cette classe sauf si vous y êtes obligé. Après l'avoir utilisé, assurez-vous de le libérer à temps ! Cette section n'expliquera pas ce B de manière trop approfondie, car il implique des éléments sous-jacents. Choses que nous devrons étudier en profondeur à l'avenir ~ Cette section présente principalement quelques concepts de base, PowerManager, wakelock Mécanisme de verrouillage et plus encore !

Documentation officielle de l'API : PowerManager


1. Qu'est-ce que PowerManager


Le système Android pour nous Fournit une API pour la gestion de l'alimentation et ses interfaces associées sont étroitement liées à la durée de vie de la batterie de l'appareil. Le responsable a également déclaré qu'à moins que cela ne soit absolument nécessaire, vous devriez essayer d'éviter d'utiliser cette classe et de la publier à temps après utilisation

La soi-disant gestion de l'alimentation comprend : le fonctionnement du processeur, l'éclairage du clavier ou de l'écran ! Le noyau est en fait le mécanisme wakelock Tant que nous maintenons ce verrou, Ensuite, le système ne peut pas entrer en état de veille et peut être obtenu par le programme en mode utilisateur ou le noyau ! Le verrou peut être : "avec timeout" ou "Pas de délai d'attente", le verrou du délai d'attente sera automatiquement déverrouillé après le délai d'attente. S'il n'y a pas de verrou ou de délai d'attente, le noyau démarrera le mécanisme de mise en veille pour entrer en veille !


2 Introduction au verrouillage .wakelock


PowerManager.WakeLock a deux états : verrouillé et déverrouillé. Il existe deux formes :

Verrouillé en permanence Ce type de verrou ne sera pas déverrouillé à moins qu'il ne soit explicitement libéré, vous devez donc être très prudent lorsque vous l'utilisez !

Verrouillage du délai d'attente, il sera déverrouillé une fois le temps écoulé. Après avoir créé WakeLock, il existe deux mécanismes de verrouillage :①Mécanisme de verrouillage sans comptage. , ② Mécanisme de verrouillage du compte (par défaut) peut être spécifié par setReferenceCounted(valeur booléenne), la différence est : Dans le premier cas, peu importe le nombre de fois acquérir( ), une seule libération( ) peut déverrouiller le verrou. Ce dernier nécessite (--count == 0), et il s'appliquera également pour le verrouillage lorsque (count == 0) Par conséquent, le mécanisme de comptage de WakeLock ne demande/libère pas de verrou pour chaque requête au vrai sens du terme ; Comptez simplement le nombre de fois où le même verrou est appliqué/libéré, puis continuez !

ps : Concernant le contenu plus approfondi, il s'agit du contenu sous-jacent. Le niveau de l'auteur est limité et je n'ai pas encore atteint ce niveau. Je n'entrerai pas dans des recherches approfondies ici, je parlerai juste de quelques bases Si nécessaire à l'avenir, j'écrirai un autre article~


3 Comment utiliser PowerManager

<🎜. >
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock w1 = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "MyTag");
w1.acquire();
//在这个过程,屏幕会保持光亮!
w1.release();

La première

marque de drapeau du newWakeLock( ) ci-dessus, ces marques affectent l'alimentation électrique du système à des degrés divers.

Ces tags sont exclusifs et un seul d'entre eux peut être spécifié à la fois.

PARTIAL_WAKE_LOCK : Gardez le processeur en marche, les lumières de l'écran et du clavier peuvent être éteintes.

SCREEN_DIM_WAKE_LOCK : Laisser le CPU fonctionner, permet de conserver l'affichage de l'écran mais peut être gris, permet d'éteindre l'éclairage du clavier

SCREEN_BRIGHT_WAKE_LOCK : garder le CPU en marche, permettre de garder l'écran en surbrillance, permettre d'éteindre la lumière du clavier

FULL_WAKE_LOCK : garder le CPU en marche, garder l'écran en surbrillance et la lumière du clavier reste également maintenue luminosité

ps : Si vous utilisez un wake lock partiel (en utilisant le flag PARTIAL_WAKE_LOCK), le CPU continuera à fonctionner, Toutes les minuteries seront ignorées, même en appuyant sur le bouton d'alimentation. Dans d'autres cas de wake-lock, le processeur continuera à fonctionner, mais l'utilisateur Cependant, vous pouvez appuyer sur le bouton d'alimentation pour mettre l'appareil en veille. Alternativement, vous pouvez utiliser plus de deux marqueurs, mais ils n'affectent que le comportement de l'écran. S'il est utilisé avec PARTIAL_WAKE_LOCK, cela n'aura aucun effet.

Paramètres de déverrouillage de l'écran :

ACQUIRE_CAUSES_WAKEUP : Le verrouillage de réveil normal n'allume pas réellement l'éclairage. Au lieu de cela, une fois ouverts, ils resteront toujours Maintenir (comme l'activité de l'utilisateur dans la prochaine vie). Lorsque le wakelock est obtenu, cet indicateur provoque l'allumage immédiat de l'écran et/ou du clavier.

Une utilisation typique consiste à voir immédiatement les notifications importantes pour l'utilisateur.

ON_AFTER_RELEASE : Si cet indicateur est défini, le minuteur d'activité de l'utilisateur sera réinitialisé lorsque le wakelock est relâché, provoquant un éclairage Dure un moment. Si vous bouclez dans une condition wacklock, cela peut être utilisé pour réduire le scintillement


4 Autorisations requises


Pour effectuer des opérations d'alimentation, vous devez le définir. dans AndroidManifest.xml Il est indiqué que l'application a la permission de définir la gestion de l'alimentation :

<uses-permission android:name="android.permission.WAKE_LOCK"/>

Vous pouvez également avoir besoin de :

<uses-permission android:name="android.permission.DEVICE_POWER"/>

De plus, le réglage de WakeLock est au Niveau d'activité , pas pour l'ensemble de la candidature appliquée !


Résumé de cette section :

D'accord, cette section présente PowerManager (service d'alimentation), mais ce n'est qu'une science populaire, et le contenu est également mentionné N'utilisez pas ce cours à moins que vous n'ayez pas le choix ~ Peu importe que vous le compreniez ou non, sachez-le simplement !