2016-04-26 122 views
1

這裏的情況,我有一個LoginActivity,它利用了WifiManager來獲得IP地址這樣的:Android的棉花糖WifiManager泄漏IntentReceiver

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

註冊任何接收器接收任何WiFi更新。我使用WifiManager來獲得IP地址而沒有別的

現在,當我完成登錄,我叫finish()LoginActivity並開始SplashActivity,這就是當我看到下面的日誌中控制檯:

LoginActivity已泄漏IntentReceiver android.net.wifi.WifiManager 這原是在這裏註冊。您是否錯過了致電 unregisterReceiver()?

而我得到這個日誌只在棉花糖。這在< 6.0設備上不會發生。同樣在棉花糖,應用程序不會崩潰,但我每次都看到這個日誌。

如果有人能解釋這種行爲?

+0

你解決了這個問題嗎?我面臨同樣的問題。如果你解決這個問題,請更新你的問題。謝謝。 –

+0

@VajiraLasantha不,我沒有。仍在等待某人回答。 – camelCaseCoder

+0

@VajiraLasantha查看凱的回答下面,讓我知道。 – camelCaseCoder

回答

1

我有相同的錯誤,但只有在出於某種原因在調試中運行時。

添加:getApplicationContext()解決了我的問題。 (雖然我不完全知道爲什麼?)

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

做了些研究,它看起來,當你轉變從一個活動到另一個上下文不再存在像後。

getApplicationContext() - 返回在應用程序中運行的所有活動的上下文。

getContext() - 僅返回上下文視圖當前正在運行的活動。

因此,最好使用getApplicationContext()來獲得任何應該在您的應用程序的整個生命週期中生存的任何東西。

+0

是的,你是對的。我測試了這一點,日誌中沒有例外。一個解釋會很棒,但我會反正高舉並接受答案。謝謝。 – camelCaseCoder

+0

謝謝,我做了更多研究並更新了我的答案。 – Kai

+0

是的,這是有道理的。但是,出於這個原因,泄露'IntentReceiver'還是有點奇怪。而且不要忘記,這種行爲僅在6.0+設備上。對於<6.0設備,'getContext()'工作得很好。 – camelCaseCoder