2012-04-24 14 views

答えて

1

View#getContext()

class View { 
    protected Context mContext; 
    public final Context getContext() { 
     return mContext; 
    } 
} 

で、ローカルにキャッシュ実装:あなたはmLocalContext代わりのgetContext()を使用する場合

class X { 
    private final Context mLocalContext; 
    public X(Context ctx) { 
     mLocalContext = ctx; 
    } 
} 

は今、非常に小さな違いがあります。 JVMはメソッドを実行しなくてもコンテキストオブジェクトの必要な参照を得ることができます(余分な時間がかかります)。 View#mContextが変更可能(変更可能)なので、その呼び出しを最適化することはできません。ローカルの例では、mLocalContextはコードを少し変更して最適化できないと仮定することができます。 [注:私は、どのような最適化ができるかについて100%確信しているわけではありません。

コンテキストを多用しても差はありませんが、大したことはありません。オブジェクトを頻繁に必要とする場合は、オブジェクトをローカルにキャッシュするのは良い考えです。特に、(再)構築に時間がかかる場合(例えば、getContext()new Context()程度になる場合)。

4

どこでもgetContext()を使用する代わりに、現在のコンテキストをコンストラクタの引数として渡して使用したい方がよいでしょう。

+3

私はAgarwalに同意します。ローカルに値を格納するのが最速のアプローチです。 getContext()のような高速で軽量な関数でさえも。 [開発のための設計]に関する開発者ガイド(http://developer.android.com/guide/practices/design/performance.html)は、「内部ゲッター/セッターを避ける」セクションを参照してください。 – Sam

1
ソースコードから、ビューのコンストラクタは、コンテキストパラメータを格納し、それがのgetContext()が返すものだ、のように見えます

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/view/View.java#View.getContext%28%29

だから、私の本能は、パラメータを格納すると、自分がなることだろうスーパークラスはすでにあなたのためにそれをやっているので、冗長です。

関連する問題