Androidアプリケーションで、コンテキストへの長期間の参照を保持するのは間違いであり、メモリリークの原因であると読みました。
しかし、次のようなクラスを作成しても問題ないかどうかはわかりません。
public class HelperClass {
private Context context;
public HelperClass(Context context) {
this.context = context;
}
public void myHelperMethod() {
// uses this.context
}
}
そして、アクティビティからそれを呼び出します:
public class MyActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
HelperClass h = new HelperClass(this);
h.myHelperMethod();
}
...
}
これは問題なく、メモリリークを引き起こすことはありません。
onCreate
の実行が終了するとすぐに、h
はスコープ外になり、ガベージコレクションの対象になります。 h
が静的である場合、問題が発生します。コンテキストへの参照がコンテキスト自体のライフサイクルよりも長生きする場合にのみ、メモリリークが発生します。いくつかの役立つヒント:
Context.getApplicationContext()
を使用してください。このコンテキストは、アプリケーションが存続している限り存続します。HelperClassのスコープはonCreate関数内にのみあるため、onCreateが実行されると、「h」オブジェクトは不要になり、ガベージコレクションの対象になります。
「h」が静的メンバーである場合、それは別の話になります-それはメモリをリークするための素晴らしい方法です。