Android 棉花糖 WifiManager 泄漏 IntentReceiver

标签 android android-6.0-marshmallow wifimanager android-6.0.1-marshmallow

场景如下,我有一个 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/

相关文章:

android - 解析/读取 Json 的最简单方法

Android在棉花糖中获取蓝牙地址

安卓检查权限

android - 获取 Wifi 扫描结果时出现 SecurityException

Android:在应用程序中连接时,应用程序无法在 wifi 网络上 ping 设备

android - 在 Android 上的 Circle 上查找点

android - 来自 SherlockFragment (ClassCastException) 的 ActionBar 菜单膨胀错误

android - 我想在 android 后台每隔 5 分钟调用一次方法

android - Cordova Media 插件在 Android 6 (Marshmallow) 上无法播放 mp3 互联网音频流

android - WifiManager.setWifiEnabled 在 hive 上无法正常工作