2016-10-26 14 views
0

私は自分のプロジェクトに多くの静的ヘルパーメソッドを持っており、しばしばそれらのコンテキストに引数として渡します。このようにコンテキストを渡すと、それの参照を保持するための静的メソッドを引き起こし、メモリリークを引き起こす可能性があればここで二つの例静的メソッドにコンテキストを渡すと、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

こんにちは@Ali Zahidあなたはパラメータでコンテキストを渡すと、上記の二つの方法のように使用している場合、あなたはstaticキーワードを使用して、そのオブジェクトを格納していないので、それはデ参照されますクラス。これらのオブジェクトだけが、初期化中にクラス名の前にstaticキーワードを適用したメモリに保存されます。例えば

static int a = 0; 
0

onDestroy()の参照を安全に削除し、メモリリークを回避することができます。

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

:)

関連する問題