it-swarm.com.de

Was ist com.google.Android.gms.persistent und warum wird immer die CPU verwendet?

Selbst wenn nichts anderes passiert, scheint dieser Systemprozess 1-2% der CPU zu beanspruchen. Im Laufe eines Tages entlädt dies eine beträchtliche Menge an Batterie, selbst wenn das Gerät nicht für irgendetwas verwendet wurde. Ich war nicht in der Lage, es mit anderen Apps in Verbindung zu bringen, denn selbst wenn sie nur einige Sekunden CPU-Zeit über mehrere Stunden beansprucht haben, beansprucht dieser Prozess Minuten.

Es scheint immer noch zu laufen, auch wenn ich:

  • wLAN ausschalten
  • schalten Sie BlueTooth aus
  • standortdienste deaktivieren
  • deaktivieren Sie alles außer dem Minimum an Synchronisierung (z. B. GMail).

Ich schrieb eine kleine Test-App, die /proc/<pid>/stat alle 10ms überwacht und jedes Mal com.google.Android.gms.persistent in logcat schreibt, in der Hoffnung, dass sie etwas in logcat schreibt, aus dem hervorgeht, welche App oder ein anderer Dienst "permanent" für seine Dienste verwendet. Ich sehe nicht viel, aber hier sind ein paar Dinge, die ich gesehen habe:

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

Jede Zeile oben war zu einer anderen Zeit, unmittelbar vor (innerhalb von 10 ms) einer Protokollnachricht, die die CPU-Nutzung durch com.google.Android.gms.persistent feststellt, jedoch ohne eindeutige Angabe, ob sie in Beziehung steht oder nicht. Leider ist in keinem der oben genannten Berichte mehr als 10 ms CPU-Zeit erforderlich. Wenn Sie also genau angeben, was "persistent" verwendet, ist dies nur ein kleiner Teil der tatsächlich verwendeten CPU-Zeit.

Andere Versuche zu erforschen, wie dieser Prozess verwendet wird, haben verschiedene Dinge vorgeschlagen (z. B. Wearables), die ich nicht habe und noch nie mit meinem Gerät verbunden war.

Was nutzt dieser Prozess? Ich suche entweder direkt nach diesen Informationen oder nach zusätzlichen Möglichkeiten, diese Informationen ähnlich wie bei meinen Versuchen über logcat abzuleiten.

Update: Ich habe nach der Quelle (z. B. com.google.Android.gms.persistent.Java oder etwas Ähnlichem) auf https://Android.googlesource.com gesucht, ohne dass dies ein Glück war. Ist das nicht Teil des öffentlichen Quellcodes? Was wirklich seltsam ist, ist, dass es nicht einmal eine Dokumentation gibt, z. hier: https://Android.googlesource.com/platform/frameworks/base/+/33fca8e/docs/html/reference/com/google/Android/gms

Update 2: Ich habe die Synchronisierung unter Einstellungen -> Konten deaktiviert. Dies scheint die CPU-Auslastung etwas zu reduzieren, und der Akkuabfall scheint auf eine Durchforstung gesunken zu sein - außer periodisch scheint es, dass com.google.Android.gms.persistent immer noch einen CPU-Schub benötigt. 

Meine Arbeitstheorie lautet nun, dass es einen Alarm gibt, der in Abständen von etwa 60 Sekunden ausgelöst wird, unabhängig davon, ob er benötigt wird oder nicht, und dass der Code die Synchronisierungsarbeit überprüft. Wenn nichts synchronisiert werden muss, gibt es die richtige Zeitscheibe auf weg und lässt die CPU nach rechts schlafen. Ich kann nicht halbwegs glauben, dass solch ein schreckliches Design verwendet werden würde, da alles, was die CPU jede Minute aufweckt, die Batterie viel schneller entleeren wird, auch wenn sie gerade wieder in den Ruhezustand geht und warum Abfragen verwendet werden anstatt etwas Interrupt für Synchronisierung trotzdem angesteuert?

Soweit ich feststellen kann (weil ich es nicht finden kann), ist der Quellcode für com.google.Android.gms.persistent nicht Open Source oder irgendwo online verfügbar. Wenn ich falsch liege, würde ich als Antwort auf meine Frage jede Antwort akzeptieren, die auf den Quellcode verweist, da ich ihn durchsuchen könnte und für mich selbst ermitteln kann, warum die CPU-Auslastung verwendet wird.

31
Michael

Es ist kein Virus oder Trojaner. Es ist ein Google Play-Dienstprozess, der die Google Play-Dienste in der Android-Plattform ordnungsgemäß ausführen muss. Tatsächlich ist dies der Hauptprozess, der im Hintergrund ausgeführt wird. Es ist nützlich, die für Google Play Store verknüpften Apps zu unterstützen, sie auf dem neuesten Stand zu halten und andere Google Play-Service-Funktionen bereitzustellen. In Bezug auf die CPU-Auslastung laufen auch viele andere Apps in Hintergründen und Ressourcen, werden jedoch auf dem neuesten Stand gehalten und bieten bessere Echtzeitdienste.

1
Mohit Dixit