2011-05-10 8 views
1

アンドロイドでは、私は参照 "コンテキスト"またはいくつかのクラスに "コンテキスト"を渡す必要があります。この目的のために、私は "コンテキスト"と他のすべてのクラスアクセスコンテキストを保持する静的クラスを実装しました。静的クラスを介してコンテキストを効率的に渡すかどうかを確認しますか?

//let's say I have a static class DataHolder 
//and my main acitivity i.e. whose context need to be refrenced 

public class DataHolder{ 
     public static Context context; 
    } 

public class MainActivity extends Activity{ 
    public void onCreate(Bundle bundle){ 
    DataHolder.context = getApplicationContext(); 
    } 
} 

このプロセスは正常に実装されているか、Androidアプリケーションで参照するのが適切ではありません。

+0

洞察のためにアレックスとヴィセンテに感謝します。私はそのように見ていませんでした。私は1つの質問アクティビティの破棄やオリエンテーションの変更など、アクティビティが必要なくなった場合は、静的なrefrenceのnull値を返すと、それでもメモリリークが発生します。とにかくあなたの両方への返事にもう一度感謝します – laaptu

答えて

4

ここでの問題は、効率性に関するものではなく、コンテキストを静的に格納するという固有のリスクについてです。

多くのイベントでコンテキストが変更される可能性があります。デバイスの向きが変更される可能性が最も高いため、常にそれを中継する必要はありません。コンストラクタ内のコンテキストを、それを使用すると思われる各クラスに渡す必要があると思います(または、少し難解かもしれませんが、使用できない場所ではコードを再設計する必要はありません)。

最悪の場合のシナリオでは、可能な限り頻繁に更新するようにしてください。しかし、もう一度、いつでもアクセスできるようにするのは何ですか?私は、怠惰に見合った価値がないと思う(礼儀正しく聞こえない場合は申し訳ないが、慎重なアプリデザインを作るという意味ではない)。

0

メモリリークを引き起こす可能性があるので、絶対に避けてください。 読む:Avoiding memory leaks

これは、ビューが全体の活動への参照を持っているので、あなたの活動が上に保持しているものにすることを意味します。通常はView階層全体とそのすべてのリソースです。したがって、Context( "leak"という意味)を漏らすと、GCがそれを収集しないようにするための参照を保持するという意味で、多くのメモリが漏れます。あなたが慎重でない場合は、活動全体を漏れることは本当に簡単です