Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将上下文传递给静态方法会导致Android内存泄漏吗?_C#_Android_Memory Leaks_Xamarin.android - Fatal编程技术网

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

C# 将上下文传递给静态方法会导致Android内存泄漏吗?,c#,android,memory-leaks,xamarin.android,C#,Android,Memory Leaks,Xamarin.android,我的项目中有很多静态助手方法,我经常将上下文作为参数传递给它们。这里有两个例子 private static bool SaveSetupDetails(Context context, string sftpAddress, string sftpUserName, string sftpPassword) { try { using (ISharedPreferences settings = PreferenceManager.GetDefaultShare

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

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;
}

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

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

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

:)

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

static int a = 0;