将上下文传递给静态方法会导致Android内存泄漏吗?

时间:2016-10-26 07:17:45

标签: c# android memory-leaks xamarin.android

我的项目中有很多静态辅助方法,我经常将上下文作为参数传递给它们。这是两个例子

private static bool SaveSetupDetails(Context context, string sftpAddress, string sftpUserName, string sftpPassword)
{
    try
    {
        using (ISharedPreferences settings = PreferenceManager.GetDefaultSharedPreferences(context))
        using (ISharedPreferencesEditor editor = settings.Edit())
        {
            editor.PutString("VePSFTPAddr", sftpAddress);
            editor.PutString("VePSFTPUser", sftpUserName);
            editor.PutString("VePSFTPPass", sftpPassword);

            editor.Commit();
            return true;
        }
    }
    catch (Exception e)
    {
        Log.Debug("SomeTag", "SomeActivity - SaveSetupDetails threw an exception: " + e.Message);
        return false;
    }
}

第二个例子

public static bool IsCallActive(Context context)
{
    AudioManager manager = (AudioManager)context.GetSystemService(Context.AudioService);
    if (manager.Mode == Mode.InCall)
    {
        return true;
    }
    return false;
}

我想知道如果传递这样的上下文会导致静态方法保持它的引用并导致内存泄漏。或者在方法执行完毕后它是否被取消引用?

2 个答案:

答案 0 :(得分:2)

嗨@Ali Zahid如果您在参数中传递上下文并使用上述两种方法,那么它将被取消引用,因为您还没有在类中使用静态关键字存储其对象。只有那些对象将保存在我们在初始化时在类名前面应用静态关键字的内存中。例如

static int a = 0;

答案 1 :(得分:0)

您可以安全地取消注册onDestroy()中的引用,并避免内存泄漏。

@Override
protected void onDestroy() {
super.onDestroy();
//unregister your references.
}

:)