2011-09-11 4 views
-3

これはgetApplicationContext()またはこれよりも効率的です(アクティビティを拡張します)?どうして?アンドロイドでContextを使う方が効率的ですか?

+1

タイトルを変更してください。それはあなたの問題を正確に説明するものではありません。 –

+1

なぜ気になりますか?プロファイリングの前にこのプロファイリングをプロファイリングしたり質問したりするときに、あなたが違いを見られるのは間違いないと思う(http://c2.com/cgi/wiki?PrematureOptimization)。 –

答えて

6

あり、効率の面では差が私の知る限りではありません(とがある場合、それは無視する必要があります)話しているか知っているだろう。 getApplicationContext()が導入された理由は、メモリリークを避けるためです。

たとえば、長い生きたオブジェクトに文脈としてActivityを渡して、このオブジェクトが生涯にわたってこのコンテキストを保持しようとすると、問題が発生します。たとえば、構成が変更された場合、またはアクティビティーが破棄された場合、アクティビティーはデッド(コンポーネント)と見なされます。しかし、この古いActivityオブジェクトへの参照が少なくとも1つあるため、ガベージコレクタによってクリーンアップされることはありません。

したがって、長い時間のコンテキストを保存する必要がある場合は、直接コンテキストを保存する代わりにcontext.getApplicationContext()を使用する必要があります。また、プロセスが実行されている間は、Applicationオブジェクトは常に「生きている」とみなされるため、メモリ/リソースのリークはありません。

-1

getApplicationContext()を使用すると、アプリケーション全体の主要なコンテキストであるため、実行しているすべてのアクティビティのコンテキストのインスタンスではなく、より効率的です。

これを読んで:http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html、その後、約

+0

仮想メソッド呼び出し(なぜ[別の仮想メソッドを呼び出す])(http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.4_r1/android /content/ContextWrapper.java#ContextWrapper.getApplicationContext%28%29))既存の 'this'参照を引数として渡すよりも安くなるでしょうか? –

+0

これを読んでください:http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html、それからあなたは何について話しているか知っています –

関連する問題