例としてカスタムビューまたは拡張ビューを使用しましょう。getContext()またはコンストラクタからコンテキストを取得する
のパラメータをフィールドとしてコンストラクタから保存すると、どこにでもgetContext()
を呼び出すより効果的ですか(必要な場所が10か所以上あるとします)。
例としてカスタムビューまたは拡張ビューを使用しましょう。getContext()またはコンストラクタからコンテキストを取得する
のパラメータをフィールドとしてコンストラクタから保存すると、どこにでもgetContext()
を呼び出すより効果的ですか(必要な場所が10か所以上あるとします)。
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()
程度になる場合)。
どこでもgetContext()を使用する代わりに、現在のコンテキストをコンストラクタの引数として渡して使用したい方がよいでしょう。
:
だから、私の本能は、パラメータを格納すると、自分がなることだろうスーパークラスはすでにあなたのためにそれをやっているので、冗長です。
私はAgarwalに同意します。ローカルに値を格納するのが最速のアプローチです。 getContext()のような高速で軽量な関数でさえも。 [開発のための設計]に関する開発者ガイド(http://developer.android.com/guide/practices/design/performance.html)は、「内部ゲッター/セッターを避ける」セクションを参照してください。 – Sam