FusedLocationProviderClient.removeLocationUpdates gibt immer einen Fehler zurück

8

Ich habe eine activity , die eine Basis erweitert class genannt LocationAwareActivity all dies LocationAwareActivity activity erstellt einen Location Service Client

LocationServices.getFusedLocationProviderClient und listens zu Standortaktualisierungen.

Quelle für diese Aktivität ist hier Ссылка

Und wenn die Aktivität zerstört wird, ruft sie removeLocationUpdates auf. Was ich finde, ist

  • removeLocationUpdate gibt eine Aufgabe zurück, die immer nicht erfolgreich zurückgibt
  • Wichtiger ist, dass die Standortaktivitäten nicht entfernt werden und dass activity nicht zu Garbage Collection wird.

- Wenn ich also irgendeine Aktivität starte, die von LocationAwareActivity erbt, bleibt diese Aktivität immer auf dem Heap.

Es stellt sich also die Frage, wie man den Empfang von Standortaktualisierungen nicht mehr richtig durchführen kann, damit activity als Garbage Collection erfasst werden kann.

Die gesamte Quelle für dieses Projekt kann hier abgerufen werden - Ссылка

    
Subodh Nijsure 08.12.2017, 05:19
quelle

4 Antworten

3

Der Grund, warum das Task-Objekt false zurückgibt, ist in Ihrer stopLocationUpdates -Methode. Sie erstellen erneut eine lokale **LocationCallback** -Referenz und verwenden diese Referenz dann als Argument in locationProviderClient.removeLocationUpdates(cL); . wo Ihr lokaler LocationCallBack nie im locationProviderClient vorhanden ist

Sie müssen also anstatt ein anderes LocationCallBack-Objekt zu erstellen, dasselbe globale Objekt übergeben, das Sie in Ihrer startLocationUpdates -Methode instanziieren

sollte dein Code so sein

%Vor%     
Hasif Seyd 08.12.2017 05:41
quelle
3

In removeLocationUpdates sollten Sie locationCallback übergeben, die aktuelle Implementierung ist falsch.

Dennoch besteht die Möglichkeit, dass Speicher irgendwo anders ausgelaufen ist. Sie sollten versuchen, Leakcanary in Ihre App zu integrieren, und es kann Ihnen einen Referenzbaum geben und Ihnen sagen, welches Feld oder welcher Listener diesen Speicherverlust verursacht . Sie können einen meiner einzigen Blogpost hier

nennen %Vor%     
Akhil 15.12.2017 18:22
quelle
3

Beim Betrachten des Codes im Repository habe ich einige Probleme in Ihrem Design entdeckt, die dazu führen könnten, dass% code% verloren geht.

1) Sie verwenden zwei verschiedene Activity . Eine im Start und eine in der Stop-Methode, aber Sie sollten eigentlich das gleiche verwenden. Ein einmaliges Instanziieren wäre also ausreichend und würde wahrscheinlich auch zu einem erfolgreichen Ergebnis von LocationCallbacks führen, wenn Task entfernt wird.

2) Da Sie LocationCallback zweimal mit LocationCallback instanziiert haben, behalten Sie eine nicht statische Referenz einer inneren Klasse bei, selbst wenn Sie die umschließende Klasse beenden, was Ihre Anonymous Class verursacht. Sie können mehr darüber lesen hier .

3) IMHO ist es besser, eine separate Manager-Klasse für die Verarbeitung Ihrer Standortanforderungen zu verwenden, als eine Memory Leak zu abstrahieren.

Das sagte hier ist mein ...

Lösung

GpsManager.java

%Vor%

und rufe dies von deinem Activity wie folgt auf

YourActivity.java

%Vor%

Dies ist nur eine Vermutung, weil ich Ihren Code nicht versucht habe, aber die Lösung sollte Ihnen trotzdem helfen. Bitte korrigieren Sie mich, wenn ich falsch liege;)

    
Peppermint Paddy 15.12.2017 20:41
quelle
2

Hi @Subodh Nijsure Bitte prüfen Sie den folgenden Code und fügen Sie ihn in Ihren Code ein und nachdem Sie ihn überprüft haben:

%Vor%

Ich denke voidTask.isSuccessful () Diese Methode funktioniert nicht, wenn Sie diesen Listener zu diesem Zeitpunkt verwenden, funktioniert es gut und ich sehe auch im Speicher ist es Freigabe aller Speicher, wenn Sie zu vorherigen Aktivität kommen.

Und wenn Sie zu einer Aktivität umleiten, dann bitte stopLocationUpdates () einmal in onPause () aufgerufen und von einer anderen Methode wie onDestroy (), onStop () entfernen, weil es einmal aufhört, also warum sollten wir Anruf mehrere Zeit.

Hoffe das hilft dir.

    
jyubin patel 15.12.2017 06:18
quelle

Tags und Links