2017-01-02 165 views
2

所以,我有这种方法,让我知道如果用户有一个活动的互联网连接。它运作良好。然而,泄漏金丝雀已经识别出与连接管理器相关联的内存泄漏。我目前没有在我知道的任何时候关闭我的代码中的任何地方的connectivityManager。ConnectivityManager泄漏,不知道如何解决

我试着关闭onManager中的connectivityManager。要么这不是一个选项,或者我不知道代码。说实话,我只是试图让自动填充告诉我如何去做。没有运气。

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持有一审作为静态对象。

当您首次使用活动上下文获取它时,静态对象将始终引用您的活动。使用应用程序上下文将解决问题。