Android 棉花糖 WifiManager 泄漏 IntentReceiver

Android marshmallow WifiManager leaking IntentReceiver

场景如下,我有一个 LoginActivity,它利用 WifiManager 获取 IP 地址,如下所示:

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

注册任何接收器以接收任何 WiFi 更新。我使用 WifiManager 仅获取 IP 地址 而没有其他 .

现在,当我完成登录时,我在 LoginActivity 中调用 finish() 并启动 SplashActivity,那时我在控制台中看到以下登录信息:

LoginActivity has leaked IntentReceiver android.net.wifi.WifiManager that was originally registered here. Are you missing a call to unregisterReceiver()?

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

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

我遇到了同样的错误,但只是在 运行 由于某种原因处于调试状态时。

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

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

经过更多研究后,看起来当您从一个 activity 转换到另一个时,上下文不再存在。

getApplicationContext() - Returns the context for all activities running in application.

getContext() - Returns the context view only current running activity.

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