2013-05-18 14 views
7

アプリケーションのすべてのポイントから呼び出し可能なシングルトンクラスを作成したいと思います。問題は、このクラスがその操作のためのコンテキストを必要とすることです。Androidでコンテキストを持つシングルトン

私はすべての感覚を失うので、私はMainActivityでそれを作成することを考えました。私は引数としてコンテキストを渡すinitメソッドを使用していました。その時点から、私のシングルトンは使用可能ですが、私はこれが私のMainActivity参照が常に保持されるので、私はメモリリークに遭遇するかもしれないので、これは悪いデザインだと思います。

私はここですか?

+2

シングルトンオブジェクトが静的で、コンテキストへの参照を保持している場合、そのコンテキストはガベージコレクションされません。私が間違っていない場合、これはメモリリークを引き起こす可能性があります。そうでない場合は、少し答えを広げてください。 – MichelReap

+0

メモリリーク*複数*?それがシングルトンの場合、そのインスタンス変数への単一の参照があります。これはどうやってリークですか、たとえあったとしても、どうしたら実際にどうなるのでしょうか? –

+1

さて、私のシングルトンを初期化するアクティビティに保持されているすべてのアセットは、アプリの実行中にすべて保持されます。例えば私がそこに大きなイメージを持っているなら、それは簡単に私の記憶を埋めることができ、私はすぐにそれを使い果たすことができます。 – MichelReap

答えて

11

メモリリークのためにメインアクティビティコンテキストをシングルトンに保存しないことは間違いありません。あなたのシングルトン内に定数コンテキストが必要な場合は、getApplicationContext()を使用してください。これは安全に保存できます。ただし、このコンテキストはほとんどのGUI関連機能には使用できません。まれに、シングルトン内でアクティビティレベルのコンテキストが必要ですが、セーブンなしでシングルトンのメソッドにアクティビティコンテキストを渡します。

+0

init()メソッドでgetApplicationContext()を使用すると、メモリリークの問題は発生しませんが、アクティビティ参照を直接渡すとinit(this))という問題が発生します。 – MichelReap

+1

@MichelReap 'this'は文脈だけではありません。 –

+0

さて、私はそれが欠けていたビットの情報だったと思います。 – MichelReap

関連する問題