Même lorsque rien d'autre ne se passe, ce processus système semble utiliser de manière constante 1 à 2% du CPU. Au cours d'une journée, cela draine une quantité significative de batterie même lorsque l'appareil n'a été utilisé pour rien. Je n'ai pas pu le corréler à d'autres applications car même lorsqu'elles n'ont utilisé que quelques secondes de CPU chacune au cours de plusieurs heures, ce processus utilise des minutes.
Il semble toujours fonctionner même si je :
- éteins le WiFi
- éteins le BlueTooth
- éteins les services de localisation
- éteins tout sauf le strict minimum de synchronisation (par exemple GMail)
J'ai écrit une petite application de test qui surveille /proc//stat
toutes les 10ms et écrit dans logcat à chaque fois que com.google.android.gms.persistent
, espérant qu'elle écrirait quelque chose dans logcat elle-même ce qui permettrait de localiser quelle application ou quel autre service utilise "persistent" pour ses services. Je ne vois pas grand-chose, mais voici quelques choses que j'ai vues :
InputReader: Reconfiguration des périphériques d'entrée. changements=0x00000010
WifiService: acquireWifiLockLocked: WifiLock{NlpWifiLock type=2 binder=android.os.BinderProxy@f73f0b8}
LocationFilter: Forcing la localisation stable. Localisation d'origine: Location[...
ConnectivityService: notifyType CAP_CHANGED pour NetworkAgentInfo [WIFI () - 246]
Chaque ligne ci-dessus était à un moment différent, juste avant (dans les 10ms) un message de log détectant l'utilisation du CPU par com.google.android.gms.persistent
mais sans aucune indication claire si c'est lié ou non. Malheureusement, aucune des choses ci-dessus n'indique plus de 10ms de temps de CPU utilisé, et donc - même si précis pour indiquer ce qui utilise "persistent", cela représente seulement une petite partie du temps réel du CPU utilisé.
D'autres tentatives de rechercher ce qui utilise ce processus ont suggéré diverses choses (comme les portables) auxquelles je n'ai pas et que je n'ai jamais connectées à mon appareil.
Qu'est-ce qui utilise ce processus ? Je recherche soit directement cette information, soit d'autres moyens pour déduire cette information de manière similaire à mes tentatives via logcat.
Mise à jour : J'ai désactivé toute synchronisation sous Paramètres -> Comptes. Cela semble réduire un peu plus l'utilisation du CPU, et la baisse de batterie semble avoir fortement diminué - sauf que périodiquement, com.google.android.gms.persistent semble toujours prendre un éclat de CPU.
Ma théorie de travail maintenant est qu'il a une Alarme qui se déclenche à des intervalles d'environ 60 secondes indépendamment de si c'est nécessaire ou non, et que le code vérifie un travail de synchronisation, et si rien n'a besoin d'être synchronisé, il abandonne immédiatement la tranche de temps et laisse le CPU se mettre en veille. Cependant, je peine à croire qu'un tel design horrible serait utilisé, car tout ce qui réveille le CPU toutes les minutes va sûrement drainer la batterie beaucoup plus rapidement même s'il revient en veille, et pourquoi la synchronisation serait-elle basée sur un sondage plutôt que sur quelque chose de piloté par interruption ?
D'après ce que je peux dire (en raison de ne pas avoir pu le trouver), le code source de com.google.android.gms.persistent n'est pas open source ou disponible en ligne nulle part. Si je me trompe, j'accepterais en réponse à ma question, toute réponse pointant vers le code source afin que je puisse le parcourir et déterminer moi-même pourquoi l'utilisation du CPU.
0 votes
Ceci fait partie de Google Play Services. Je suppose que c'est la couche de persistance pour Google Play Services. Avez-vous essayé de désactiver l'application Google Play Jeux depuis Paramètres->Applications?
0 votes
Je ne suis pas sûr de ce que
persistent
est spécifiquement utilisé pour, maisgms
est le service Play qui gère tout un tas de choses comme la localisation, les notifications Push, les analyses, etc. Toute application utilisant les services Google Play y serait connectée.0 votes
@MichaelKrause Je n'utilise pas Google Play Games de toute façon, alors j'ai essayé de le désactiver, je verrai dans une heure ou deux quel effet cela a.
0 votes
@MichaelKrause Désactiver Google Play Jeux n'a pas semblé affecter l'utilisation du processeur...
5 votes
@Michael Google Play Services est quelque chose de complètement différent de Play Games. Google Play Services est la façon dont Google fournit des mises à jour et des fonctionnalités indépendamment du système d'exploitation. Si vous le désactivez, pratiquement tout ce qui vient de Google cesse de fonctionner (y compris le Play Store, Gmail...) et d'autres applications l'utilisant pourraient ne pas fonctionner de manière fiable.
0 votes
@Michael Même problème pour moi, mais 3% dans mon cas. As-tu essayé d'arrêter ce processus? Je n'ai pas encore rooté mon téléphone donc je n'ai pas pu vérifier cette partie!
0 votes
@YogeeshSeralathan J'ai en fait envisagé d'envoyer un signal
SIGSTOP
au processus (au lieu deKILL
) et d'observer ensuite quels autres processus commençaient à avoir des threads en attente. Mais en regardant le rootage, j'ai découvert que cela compromettrait la sécurité de mon appareil (chargeur de démarrage déverrouillé, partition décryptée, etc.) et j'ai décidé que cela devrait attendre...2 votes
@Michael ouais, j'ai remarqué le même comportement il y a quelques semaines aussi. Ce processus "com.google.android.gms.persistent" tue les performances de mon Nexus 6 !
0 votes
J'ai également des problèmes de batterie avec "com.google.android.gms.persistent" (version 9.8.77 sur un Note 4 rooté) depuis le début de novembre/2016..... La seule façon d'arrêter cela est de tuer le processus.
0 votes
J'ai également des problèmes, utilisant une tonne de CPU sur une vieille tablette, surtout lorsque je lui donne accès à Internet pour la première fois depuis un jour ou deux. As-tu avancé dans tes recherches @Michael?
0 votes
@flindeberg Non, car cette fois mon appareil a été mis à niveau vers Android N (7.0) ce qui empêche apparemment les autres applications de voir même combien de CPU différents processus utilisent.