2017-01-02 13 views
2

Итак, у меня есть этот метод, который позволит мне узнать, имеет ли пользователь активное подключение к Интернету. Это работает хорошо. Однако утечка канарейки выявила утечку памяти, связанную с connectivityManager. Я в настоящее время не закрываю connectivityManager в любом месте своего кода в любое время, о котором я знаю.Ошибка подключения ConnectivityManager, не знаю, как решить

Я попытался закрыть connectivityManager в onDestroy. Либо это не вариант, либо я не знаю кода. По правде говоря, я просто пытался получить автозаполнение, чтобы рассказать мне, как это сделать. Не повезло.

public static boolean isNetworkAvailable(Context context) { 
    ConnectivityManager connectivityManager =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo =connectivityManager.getActiveNetworkInfo(); 
    return activeNetworkInfo !=null && activeNetworkInfo.isConnected(); 
} 
+0

context.getSystemService может быть заменен на getSystemService –

+0

@santosh Я получаю следующую ошибку при внесении изменений. Нестатический метод 'getSystemService (java.lang.string)' не может ссылаться на статический контекст – seekingStillness

+0

, тогда ваш код имеет смысл. –

ответ

8

Используйте это, чтобы предотвратить утечку,

ConnectivityManager connectivityManager = (ConnectivityManager) context.getApplicationContext() 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
+0

Спасибо, я добавил код, никаких ошибок. После успешного теста я приму ответ. – seekingStillness

+0

С удовольствием :) –

+0

хотел бы понять, почему его предотвратить утечку/почему была утечка до –

1

Это ошибка в Android M и был зафиксирован на L.

Причина заключается в том, что на М, ConnectivityManager держит первый экземпляр как статический объект.

Когда вы получаете его сначала с использованием контекста активности, статический объект всегда будет ссылаться на вашу активность. Использование контекста приложения решит проблему.