web-dev-qa-db-fra.com

Qu'est-ce que com.google.Android.gms.persistent et pourquoi utilise-t-il toujours le processeur?

Même lorsque rien d’autre ne se passe, ce processus système semble utiliser à peu près 1 à 2% du processeur. Au cours d'une journée, cela draine une quantité importante de batterie, même lorsque l'appareil n'a été utilisé à aucune fin. Je n'ai pas été en mesure de le corréler avec d'autres applications, car même lorsqu'elles n'ont utilisé que quelques secondes de temps processeur chacune au cours de plusieurs heures, ce processus utilise des minutes.

Il semble toujours fonctionner même si je:

  • désactiver le WiFi
  • désactiver BlueTooth
  • désactiver les services de localisation
  • désactiver tout sauf le strict minimum de synchronisation (par exemple, GMail)

J'ai écrit une petite application de test qui surveille /proc/<pid>/stat toutes les 10 ms et écrit dans logcat à tout moment com.google.Android.gms.persistent, en espérant qu'il écrirait quelque chose à logcat lui-même qui indiquerait quelle application ou autre service utilise "persistante" pour ses services. Je ne vois pas grand chose, mais voici quelques petites choses que j'ai vues:

InputReader: Reconfiguring input devices.  changes=0x00000010
WifiService: acquireWifiLockLocked: WifiLock{NlpWifiLock type=2 binder=Android.os.BinderProxy@f73f0b8}
LocationFilter: Forcing stable location. Original location:Location[...
ConnectivityService: notifyType CAP_CHANGED for NetworkAgentInfo [WIFI () - 246]

Chaque ligne ci-dessus était à un moment différent, précédant immédiatement (dans un délai de 10 ms) un message de journal détectant l'utilisation de l'UC par com.google.Android.gms.persistent, mais sans indiquer clairement si cela était lié ou non. Malheureusement, aucune des réponses ci-dessus ne fait état de plus de 10 ms de temps de calcul; même si le terme "persistant" est utilisé avec précision, il ne représente qu'une petite partie du temps de calcul réellement utilisé.

D'autres tentatives de recherche sur l'utilisation de ce processus ont suggéré diverses choses (telles que les dispositifs portables) que je n'ai pas et que je n'ai jamais connectées à mon appareil.

Qu'est-ce que l'utilisation de ce processus? Je cherche soit directement cette information, soit d'autres moyens de déduire cette information de manière similaire à mes tentatives via logcat.

Mise à jour: Je cherchais la source (par exemple, com.google.Android.gms.persistent.Java ou quelque chose du genre) sur https://Android.googlesource.com sans aucune chance. Cela ne fait-il pas partie du code source public? Ce qui est vraiment étrange, c'est qu'il ne semble même pas y avoir de documentation, par exemple. ici: https://Android.googlesource.com/platform/frameworks/base/+/33fca8e/docs/html/reference/com/google/Android/gms

Mise à jour 2: J'ai désactivé toute la synchronisation sous Paramètres -> Comptes. Cela semble réduire un peu plus l'utilisation du processeur et le déchargement de la batterie semble s'être échoué - à l'exception de temps en temps com.google.Android.gms.persistent semble toujours prendre une rafale de processeur. 

Ma théorie actuelle est qu’une alarme se déclenche toutes les 60 secondes environ, qu’elle soit nécessaire ou non, et que le code vérifie le bon fonctionnement de la synchronisation. Si rien n’a besoin d’être synchronisé, il renonce correctement à la tranche de temps. partir et laisse le processeur aller se coucher. Cependant, je ne parviens pas à croire qu’un design aussi horrible serait utilisé, car tout ce qui réveille le processeur toutes les minutes est certain de vider la batterie beaucoup plus rapidement, même si elle se met en veille, et pourquoi le polling serait utilisé au lieu de quelque chose d'interruption entraîné pour la synchronisation de toute façon?

Autant que je sache (faute de pouvoir le trouver), le code source de com.google.Android.gms.persistent n'est pas une source ouverte ni disponible en ligne, où que ce soit. Si je me trompe, j'accepterais comme réponse à ma question toute réponse qui indiquerait le code source car je pouvais le parcourir et déterminer par moi-même pourquoi l'utilisation du processeur.

31
Michael

Ce n'est pas un virus ou un cheval de Troie. c’est le processus de service de Google Play qui doit exécuter correctement les services de Google Play dans la plate-forme Android. En fait, c’est le processus principal exécuté en arrière-plan, il est utile de prendre en charge les applications et de les associer à Google Play Store, de les maintenir à jour et de fournir d’autres fonctionnalités du service Google Play. En ce qui concerne les utilisations du processeur, de nombreuses autres applications fonctionnent également en arrière-plan et utilisent des ressources, mais c'est pour les garder à jour et vous fournir de meilleurs services en temps réel.

1
Mohit Dixit