1

シナリオは次のとおりです。LoginActivityを使用して、次のようにIP アドレスWifiManagerを取得します。

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 未満のデバイスでは発生しません。マシュマロでも、アプリがクラッシュすることはありませんが、毎回このログが表示されます。

誰かがこの動作を説明できますか?

4

1 に答える 1

2

同じエラーが発生しましたが、何らかの理由でデバッグで実行している場合のみです。

追加:getApplicationContext()問題を修正しました。(理由はよくわかりませんが?)

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

もう少し調査を行った後、あるアクティビティから別のアクティビティに移行すると、コンテキストが存在しなくなったように見えます。

getApplicationContext() - アプリケーションで実行されているすべてのアクティビティのコンテキストを返します。

getContext() - 現在実行中のアクティビティのみを表示するコンテキストを返します。

したがって、アプリの存続期間中存続する必要があるものには、 getApplicationContext() を使用するのがおそらく最善です。

于 2016-11-15T06:00:31.207 に答える