Android - findViewById()vs findViewWithTag()

时间:2016-10-12 12:55:23

标签: java android

当编写具有许多视图的大型应用程序时(因此,许多ID),
这是一种更好的做法,或者表现更好;
拥有多个ID并使用findViewById(X)找到它们,或者使用多个标记并使用findViewWithTag(Y)查找视图?

2 个答案:

答案 0 :(得分:1)

就更好的做法而言,根据应用的要求使用一个或两个(通常是两者)。如果我是你,我会更关心可用性和分组而不是性能(因为应用程序很大并且可能变得不可维护)。

度Acc。到Android Docs的这一部分:

标签与ID不同,标签不用于标识视图。标签本质上是可以与视图相关联的额外信息。它们通常用于方便在视图中存储与视图相关的数据,而不是将它们放在单独的结构中。

Android中Tag的主要目的是使代码分组更清晰。可以把它想象成超市中的标记项目:食品,电子产品等......我认为使用标签对性能的影响最小。

但是,下面描述的做法对性能的影响要大于避免使用标签/视图或两者兼而有之。

如果您想提高效果,

答案 1 :(得分:1)

findViewWithTag()仅为视图定义。但是,findViewById()可用于查看和活动。

我认为findViewById()访问视图的最佳做法。即使您应该使用Butterknife enter image description here来访问视图。

效果:findViewById()findViewWithTag()快,因为比 String.equals()更快地比较 int

View.java

protected View findViewTraversal(@IdRes int id) {
    if (id == mID) {
        return this;
    }
    return null;
}

protected View findViewWithTagTraversal(Object tag) {
    if (tag != null && tag.equals(mTag)) {
        return this;
    }
    return null;
}