21

コンテキストをコンストラクターに渡し、内部使用のためにプライベート変数として保存するのは悪い習慣ですか?もう1つのオプションは、コンテキストを必要とするメソッドにパラメーターとしてコンテキストを渡すことです。

どちらがより良いオプションですか?コンストラクターに渡すと、誤ってメモリリークが発生する可能性があると感じています。

4

3 に答える 3

12

多くの場合、必要なのは、だけなApplicationContextので、実行できるのは、だけではthis.getApplicationContext()なくパスthisです。とにかく、アプリのコンテキストはアプリの存続期間中存在するため、メモリリークではありません。

于 2010-05-26T16:20:59.463 に答える
9

それはあなたのオブジェクトの寿命に依存します。オブジェクトがアクティビティによって内部的にのみ使用されることが確実な場合は、コンテキストをコンストラクターに渡しても問題ありません。それ以外の場合は、でコンテキストを渡さないでください。

オブジェクトにコンテキストへの参照がある場合、これによりガベージコレクション中のアクティビティが停止します。また、アクティビティにはすべてのビューへの参照があるため、大量のメモリを非常にすばやく簡単にリークできます。

デバイスの回転などによってアクティビティが再作成され、気付かずにオブジェクトに固執するのは簡単なので、ここで簡単に理解できます。

したがって、安全を確保し、必要に応じてコンテキストを渡すのがおそらく最善です。

于 2010-05-26T16:17:28.587 に答える
1

(起動する)メインアプリケーションで、変数appContextを宣言します: "public static Context appContext;" 次に、このメインアプリケーションのonCreate()メソッドで、「appContext=this;」を割り当てます。appContextはパブリックであるため、このパッケージ内の他のクラスはappContextを使用してXMLリソースを追跡できます。これは(メモリの観点から)もっと良いですか?

リソースが必要なのはリソースだけなので、メインアプリケーションでResourcesオブジェクトをpublic staticとして宣言し、それを他の場所で使用することをお勧めします。

于 2010-07-20T16:22:47.950 に答える