2015-12-17 4 views
10

Ich habe ein Problem festgestellt, dass die GooglePlayServices App meinen Bewerbungsprozess für ihren Dienst verwendet und auch die Anzahl der Prozesse als 2 anzeigt.
Ich habe den Screenshot für die gleich. Ich habe keine Ahnung, warum es passiert.
Es nimmt mehr Speicher im Vergleich zu meinem App-Prozess."Service MeasurementBrokerService wird verwendet" wird in meinem Bewerbungsprozess angezeigt


Jemand bitte kann mir dabei helfen.

enter image description here


Angezeigt werden zwei Prozesse hierenter image description here

+0

Das passiert auch für Google Mail App und es ist seltsam. – binaryKarmic

Antwort

2

begegnete ich dies heute, nachdem ich gcm meine App und was genau kann nicht herausfinden, die Verwendung dieser MeasurementBrokerService ist. Das einzige, was ich fand, war dieser Kommentar:

"Ich hatte es auch und denke, es ist mit Benachrichtigung Listener verbunden, da es scheint, dass Makrodroids Benachrichtigungen Zugang zu verhindern stoppen es. (Hoffe ich klar, mein Englisch ist nur übrig von Schule mal ...)“

von here

+2

Ich bin der Typ, der MacroDroid macht (Ihr Zitat stammt aus meinem Forum) und ich bin immer noch nicht auf den Grund gekommen, was genau das verursacht. Alles was ich weiß ist, dass wenn ich die Speicherauslastung der laufenden App beobachte, sehe ich, dass es hin und wieder auftaucht und es zeigt eine Speicherbelegung von 70MB an. Natürlich sehen einige Nutzer, dass dies zur Verwendung von Apps hinzugefügt wird und beschweren sich dann über die Menge an Speicher. Es gibt immer noch sehr wenig Informationen darüber ... – JamieH

+3

@JamieH. Ich finde auch nicht den Grund dafür. Die vorherige Version des Builds meiner App wird nicht wie oben angezeigt, aber die neueste Version zeigt den GMS-Service im Rahmen der Dienste meiner App in laufenden Apps, wie in den obigen Screenshots gezeigt. Die wichtigsten Änderungen in der neuesten Version sind CompileSdkVersion von 22 bis 23 und die Support-Bibliotheken (v4, v7 und Design) von 22 bis 23. Die Google Play Services-Version ist die gleiche. – binaryKarmic

+0

findet jemand eine Ursache? Es hat kürzlich in meiner App begonnen. – Kushan

0

Dies könnte in der App mit Ihrem Google Analytics-Integration zusammenhängen. Entfernen Sie die Google Analytics-Referenzen von Ihren Java-Code-, Projektebene- und App-Level-Gradle-Dateien. Dieses Leck tritt nur in den neuesten Google Analytics-Versionen auf. Sie können die alten Versionen von Google Play Services wie 7.3.0 integrieren, bei denen dieses Problem nicht besteht, um dieses Leck zu beheben.

2

Wir haben diesen Service auch gesehen. Es stellte sich heraus, dass Google Analytics zusammen mit einem NotificationListenerService verwendet wurde.

Aus einigen Gründen haben diese zwei Dinge nicht gut zusammen gespielt und MeasurementBrokerService lief immer und verbrauchte eine beträchtliche Menge an Speicher.

Die Lösung für uns bestand darin, Google Analytics für eine alternative Analyselösung zu entfernen.

1

Menschen, die noch diesen Thread für eine Antwort überprüfen, ich habe eine Lösung gefunden und veröffentlicht eine Antwort an:

what is Google Play services MeasurementBrokerService and how to stop it?

ich, dass irgendwie immer noch auf meinem Gerät lief AppMeasurement Dienst Google überprüft.

Ich habe mit dem folgenden Ansatz zurückgegriffen:

Die folgende stoppt die Datenerfassung durch Feuerbasis.

https://firebase.google.com/support/guides/disable-analytics sagen uns den folgenden Ansatz

<meta-data android:name="firebase_analytics_collection_deactivated" android:value="true" /> 

Dies allein noch nicht die appMeasurement von Initialisierung stoppen kann.

Der zweite Schritt, ist das Hinzufügen folgendes für die app Ebene Gradle Datei gelöst hat:

configurations { 
    all*.exclude group: 'com.google.firebase', module: 'firebase-core' 
} 

den Code Diese im Grunde entfernt alle dass Feuerbasis Analytics verwendet.

Falls es noch nicht, stellen Sie sicher funktioniert, dass die gradle nicht breit Spieldienstabhängigkeit enthält

zB: kompilieren

'com.google.android.gms:play-services-location:10.0.1' 

statt

'com.google.android.gms:play-services:10.0.1' 

Worst-Case und ich habe das nicht getestet, da das obige für mich gelöst ist:

https://developers.google.com/analytics/devguides/collection/android/v4/advanced

Google sollte wirklich aufhören, unerwünschte Dinge ohne die Erlaubnis des Entwicklers IMHO zu setzen. Hoffe, das hilft jemandem

0

Ich konnte verwalten das Problem zu lösen, indem Sie zurück Gradle Version 2.0.0 von 2,3 .2. Aus diesem Grund musste ich Gradle Wrapper von 3.3 auf 2.14.1 setzen.

Auch ich zurück zu buildToolsVersion '23.0.1 'von buildToolsVersion '25 .0.2'.

Durch das Kompilieren des Projekts wie dieser, wahrscheinlich viele Änderungen in der Build-Umgebung, denn als ich alles auf die ursprüngliche Version zurückging das Problem verschwand, kein MeasurementBrokerService mehr ausgeführt wird.

0

Die Lösung, die ich gefunden habe, ist das NotificationListenerService zu seinem eigenen process zu bewegen. Während Google Play Services auf einem anderen Konto ist.

Hintergrund

Zunächst einmal ist es schon eine gute Entscheidung, die NotificationListenerService zu trennen, weil das Ding ständig läuft, nachdem Benutzer die BIND_NOTIFICATION_LISTENER_SERVICE Erlaubnis erteilt.

Grundsätzlich, sofern nicht anders angegeben, wird Ihre App einen Prozess verwenden. Das bedeutet, dass Sie auf der Registerkarte "Running Services" neben allen Benachrichtigungsdaten, die in NotificationListenerService gespeichert sind, all Ihren Müll sehen, der noch von GC erfasst werden muss.

Wie

Um einen Dienst in einem eigenen Prozess, den Sie das android:process Attribut in Ihrem Manifest.xml

<service android:name="com.mypackage.services.NotificationService" 
android:label="@string/app_name" 
android:process=":myawesomeprocess" 
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> 

Aktivitäten hinzufügen müssen laufen

Sie können sich zu erinnern Kommunizieren Sie nicht regelmäßig zwischen Prozessen! Sie können nicht auf eine andere Klasse von einem Dienst zugreifen, der sich in einem eigenen Prozess befindet. Die einzige Lösung ist Broadcasts zu verwenden

//Send 
Intent intent = new Intent("com.mypackage.myaction"); 
context.sendBroadcast(intent); 

//Receive 
registerReceiver(broadcastReceiver, new IntentFilter("com.mypackage.myaction")); 

BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if (action!=null&&action.equals("com.mypackage.myaction")) { 
      // 
     } 
    } 
}; 

//Don't forget to unregister 
unregisterReceiver(broadcastReceiver); 

Achten Sie darauf, context und nicht LocalBroadcastManager, weil es nicht mit Prozessen funktioniert.