让我们以自定义或扩展视图为例。
Context
将构造函数的参数保存为字段是否比到处调用更有效getContext()
(假设有 10 个或更多需要它的地方)?
让我们以自定义或扩展视图为例。
Context
将构造函数的参数保存为字段是否比到处调用更有效getContext()
(假设有 10 个或更多需要它的地方)?
与其在每个地方都使用 getContext() ,不如在你想使用的构造函数中将当前上下文作为参数传递。
从源代码来看,View 的构造函数存储了上下文参数,这就是 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()
左右)。