2

例として、カスタムビューまたは拡張ビューを使用してみましょう。

Contextコンストラクターからパラメーターをフィールドとして保存する方getContext()が、どこでも呼び出すよりも効果的ですか(たとえば、必要な場所が10か所以上あると仮定します)。

4

3 に答える 3

4

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

于 2012-04-24T17:03:20.080 に答える
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

したがって、私の本能は、スーパークラスがすでにパラメータを実行しているため、パラメータを自分で格納することは冗長になるということです。

于 2012-04-24T17:27:07.480 に答える
1

View#getContext()

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

およびローカルにキャッシュされた実装:

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

mLocalContextの代わりにを使用すると、非常に小さな違いがありますgetContext()。JVMは、メソッドを実行しなくても、コンテキストオブジェクトの必要な参照に到達できます(これには少し余分な時間がかかります)。は変更可能(変更可能)であるため、その呼び出しを最適化することはできませんView#mContextmLocalContextローカルの例では、コードを少しだけ変更して最適化することはできないと想定できます。[注:最適化が何であるか/実行できるかについて100%確信はありません]

コンテキストを頻繁に使用する場合、違いは測定可能かもしれませんが、この場合はそれほど重要ではありません。オブジェクトが頻繁に必要な場合は、オブジェクトをローカルにキャッシュすることをお勧めします。特に、それらの(再)構築に時間がかかる場合(たとえば、getContext()いつ作成するnew Context()かなど)。

于 2012-04-24T17:28:13.880 に答える