场景如下,我有一个 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 过渡到另一项 Activity 时,上下文似乎不再存在。
getApplicationContext() - Returns the context for all activities running in application.
getContext() - Returns the context view only current running activity.
因此,最好将 getApplicationContext() 用于任何应在您的应用程序生命周期内存活的内容。
关于Android 棉花糖 WifiManager 泄漏 IntentReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36857436/