[英]Can passing context to static methods cause memory leaks in 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;
}
我想知道是否像这样传递上下文会导致静态方法保留其引用并导致内存泄漏。 还是在执行完方法后取消引用?
@Ali Zahid,您好:如果您要在参数中传递上下文并使用上述两种方法,则它将被取消引用,因为您尚未在类中使用static关键字存储其对象。 初始化时,只有那些对象会保存在我们在类名前面应用了static关键字的内存中。 例如
static int a = 0;
您可以安全地在onDestroy()中的引用中取消注册,并避免内存泄漏。
@Override
protected void onDestroy() {
super.onDestroy();
//unregister your references.
}
:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.