例として、カスタムビューまたは拡張ビューを使用してみましょう。
Context
コンストラクターからパラメーターをフィールドとして保存する方getContext()
が、どこでも呼び出すよりも効果的ですか(たとえば、必要な場所が10か所以上あると仮定します)。
例として、カスタムビューまたは拡張ビューを使用してみましょう。
Context
コンストラクターからパラメーターをフィールドとして保存する方getContext()
が、どこでも呼び出すよりも効果的ですか(たとえば、必要な場所が10か所以上あると仮定します)。
どこでもgetContext()を使用する代わりに、使用したいコンストラクターの引数として現在のコンテキストを渡す方が適切です。
ソースコードから、ビューのコンストラクターはコンテキストパラメーターを格納しているように見えます。これがgetContext()が返すものです。
したがって、私の本能は、スーパークラスがすでにパラメータを実行しているため、パラメータを自分で格納することは冗長になるということです。
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#mContext
。mLocalContext
ローカルの例では、コードを少しだけ変更して最適化することはできないと想定できます。[注:最適化が何であるか/実行できるかについて100%確信はありません]
コンテキストを頻繁に使用する場合、違いは測定可能かもしれませんが、この場合はそれほど重要ではありません。オブジェクトが頻繁に必要な場合は、オブジェクトをローカルにキャッシュすることをお勧めします。特に、それらの(再)構築に時間がかかる場合(たとえば、getContext()
いつ作成するnew Context()
かなど)。