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() 用于任何应在您的应用程序生命周期内存活的内容。
场景如下,我有一个 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() 用于任何应在您的应用程序生命周期内存活的内容。