Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从getContext()或构造函数获取上下文作为字段_Android_Android Custom View_Android Context - Fatal编程技术网

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”一节。