1

Hier ist das Szenario, ich habe eine LoginActivity, die von der WifiManager erhalten die IP-Adresse wie dies macht: jeder Empfänger nicht registrierenAndroid Eibisch WifiManager undichte IntentReceiver

WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); 
String ipAddress = wifiManager.getConnectionInfo().getIpAddress(); 

ich jede zu erhalten WLAN-Updates Ich verwende die WifiManager, um die IP-Adresse nur und nichts anderes zu erhalten.

Wenn ich jetzt komplett Login, ich finish() in LoginActivity anrufen und SplashActivity starten und das ist, wenn ich das folgende Protokoll in der Konsole sehen:

LoginActivity hat durchgesickert IntentReceiver android.net.wifi.WifiManager , das ursprünglich hier registriert. Vermissen Sie einen Anruf an unregisterReceiver()?

Und ich bekomme dieses Protokoll nur auf Marshmallow. Dies passiert nicht auf < 6.0 Geräte überhaupt. Auch auf Marshmallow stürzt die App nie ab, aber ich sehe dieses Protokoll jedes Mal.

Wenn jemand dieses Verhalten erklären kann?

+0

Haben Sie dieses Problem gelöst? Ich stehe vor dem gleichen Problem. Bitte aktualisieren Sie Ihre Frage, wenn Sie dies gelöst haben. Vielen Dank. –

+0

@VajiraLasantha Nein, habe ich nicht. Ich warte immer noch darauf, dass jemand antwortet. – camelCaseCoder

+0

@VajiraLasantha Schau dir Kai's Antwort an und lass es mich wissen. – camelCaseCoder

Antwort

1

Ich hatte den gleichen Fehler, aber nur wenn in Debug aus irgendeinem Grund ausgeführt wird.

Hinzufügen: getApplicationContext() behob das Problem für mich. (Obwohl ich nicht ganz sicher bin, warum?)

WifiManager wifi_manager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); 

Nach etwas mehr Forschung tut es aussieht, wenn man auf den anderen von einer Aktivität Übergang des Kontext nicht mehr existiert.

getApplicationContext() - Gibt den Kontext für alle Aktivitäten zurück, die in der Anwendung ausgeführt werden.

getContext() - Gibt die Kontextansicht nur für die aktuelle laufende Aktivität zurück.

Deshalb ist es am besten, getApplicationContext() für alles zu verwenden, was die Lebensdauer Ihrer App überleben sollte.

+0

Ja, du hast Recht. Ich habe das getestet und es gab keine Ausnahme in den Protokollen. Eine Erklärung wäre großartig gewesen, aber ich werde die Antwort trotzdem auffrischen und akzeptieren. Vielen Dank. – camelCaseCoder

+0

Danke, ich habe ein bisschen mehr recherchiert und meine Antwort aktualisiert. – Kai

+0

Ja, es macht Sinn. Aber trotzdem ist es etwas komisch, aus diesem Grund "IntentReceiver" zu bekommen. Und nicht zu vergessen, dieses Verhalten ist nur auf 6.0+ Geräten. Für <6.0 Geräte funktioniert 'getContext()' problemlos. – camelCaseCoder