Android marshmallow WifiManager leaking IntentReceiver



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

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

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

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

LoginActivity 已泄露 IntentReceiver android.net.wifi.WifiManager 最初是在这里注册的。您是否错过了 unregisterReceiver()?

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

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

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

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

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

在做了更多的研究之后,当你从一个活动过渡到另一个活动时,上下文似乎不再存在。

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

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

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

最新更新