1

这是场景,我有一个LoginActivity使用WifiManager来获取IP 地址,如下所示:

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 的设备上。同样在棉花糖上,应用程序永远不会崩溃,但我每次都会看到这个日志。

如果有人可以解释这种行为?

4

1 回答 1

2

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

添加:getApplicationContext()为我解决了这个问题。(虽然我不完全确定为什么?)

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

在进行了更多研究之后,看起来当您从一个活动转换到另一个活动时,上下文不再存在。

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

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

因此,最好将 getApplicationContext() 用于应该在您的应用程序生命周期内存活的任何内容。

于 2016-11-15T06:00:31.207 回答