Here's the scenario, I have a LoginActivity
that makes use of the WifiManager
to obtain the IP address like this:
WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String ipAddress = wifiManager.getConnectionInfo().getIpAddress();
I do not register any receiver to receive any WiFi updates. I use the WifiManager
to obtain the IP Address only and nothing else.
Now when I complete login, I call finish()
in LoginActivity
and start SplashActivity
and that's when I see the following log in console:
LoginActivity has leaked IntentReceiver android.net.wifi.WifiManager that was originally registered here. Are you missing a call to unregisterReceiver()?
And I get this log only on marshmallow. This does not happen on <6.0 devices ever. Also on marshmallow, the app never crashes but I see this log every time.
If anyone can explain this behaviour?
I had the same error, but only when running in debug for some reason.
Adding:
getApplicationContext()
fixed the issue for me. (Although I'm not entirely sure why?)After doing a bit more research it looks like when you transition from one activity to the other the context no longer exists.
So it's probably best use getApplicationContext() for anything that should survive for the lifetime of your app.