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()
или около того).
Я согласен с Agarwal. Хранение значения локально - это самый быстрый подход; даже для быстрых, легких функций, таких как 'getContext()'. Вот руководство Dev в [Designing for Performance] (http://developer.android.com/guide/practices/design/performance.html), ознакомьтесь с разделом «Избегайте внутренних Getters/Setters». – Sam