2016-04-26 125 views
1

这里的情况,我有一个LoginActivity,它利用了WifiManager来获得IP地址这样的:Android的棉花糖WifiManager泄漏IntentReceiver

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

注册任何接收器接收任何WiFi更新。我使用WifiManager来获得IP地址而没有别的

现在,当我完成登录,我叫finish()LoginActivity并开始SplashActivity,这就是当我看到下面的日志中控制台:

LoginActivity已泄漏IntentReceiver android.net.wifi.WifiManager 这原是在这里注册。您是否错过了致电 unregisterReceiver()?

而我得到这个日志只在棉花糖。这在< 6.0设备上不会发生。同样在棉花糖,应用程序不会崩溃,但我每次都看到这个日志。

如果有人能解释这种行为?

+0

你解决了这个问题吗?我面临同样的问题。如果你解决这个问题,请更新你的问题。谢谢。 –

+0

@VajiraLasantha不,我没有。仍在等待某人回答。 – camelCaseCoder

+0

@VajiraLasantha查看凯的回答下面,让我知道。 – camelCaseCoder

回答

1

我有相同的错误,但只有在出于某种原因在调试中运行时。

添加:getApplicationContext()解决了我的问题。 (虽然我不完全知道为什么?)

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

做了些研究,它看起来,当你转变从一个活动到另一个上下文不再存在像后。

getApplicationContext() - 返回在应用程序中运行的所有活动的上下文。

getContext() - 仅返回上下文视图当前正在运行的活动。

因此,最好使用getApplicationContext()来获得任何应该在您的应用程序的整个生命周期中生存的任何东西。

+0

是的,你是对的。我测试了这一点,日志中没有例外。一个解释会很棒,但我会反正高举并接受答案。谢谢。 – camelCaseCoder

+0

谢谢,我做了更多研究并更新了我的答案。 – Kai

+0

是的,这是有道理的。但是,出于这个原因,泄露'IntentReceiver'还是有点奇怪。而且不要忘记,这种行为仅在6.0+设备上。对于<6.0设备,'getContext()'工作得很好。 – camelCaseCoder