Android 从getContext()或构造函数获取上下文作为字段
让我们以自定义视图或扩展视图为例Android 从getContext()或构造函数获取上下文作为字段,android,android-custom-view,android-context,Android,Android Custom View,Android Context,让我们以自定义视图或扩展视图为例 将构造函数中的Context参数保存为字段是否比到处调用getContext()更有效(假设需要它的地方有10个或更多)?而不是到处使用getContext(),最好将当前上下文作为参数传递到要使用的构造函数中。从源代码看,视图的构造函数存储上下文参数,这就是getContext()返回的内容: 因此,我的直觉是,自己存储参数是多余的,因为超类已经在为您执行此操作了。View#getContext() class View { protected Co
将构造函数中的
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 35; mContext
是可变的(可以更改)。在本地示例中,它可以假设mLocalContext
无法更好地更改和优化代码。[注意:我不能100%确定哪些优化是/可以完成的]
如果您经常使用上下文,差异可能是可以测量的,但在这种情况下,这并不重要。如果您经常需要对象,最好在本地缓存它们。尤其是当它们的(重新)构造需要时间时(例如,
getContext()
会创建一个新的Context()
等等)。我同意阿加瓦尔的观点。在本地存储值是最快的方法;即使对于快速、轻量级的函数,如getContext()
。这是关于的开发指南,请查看“避免内部getter/setter”一节。