findViewById vs getChildAt - 哪一个更快?

时间:2016-06-22 09:45:00

标签: android performance android-view findviewbyid

获取层次结构中的视图我可以使用这两种功能。虽然findViewById更容易使用,但我经常看到它可能是一项昂贵的操作,如果可能的话应该避免使用。

因此,使用getChildAt会更快吗?有什么时候更好地使用哪个指南?

2 个答案:

答案 0 :(得分:2)

  

findViewById vs getChildAt - 哪个更快?

getChildAt确实比findViewById更快,因为它只是在指定的View访问index的数组。

  

因此,使用getChildAt代替

会更快
确实如此,但您必须知道您正在寻找的index的{​​{1}}。如果您没有任何机制来跟踪索引,那么您需要查找它,然后返回View。您可能最终会重新编写自己的findViewById版本。我的两分钱,不用担心。

答案 1 :(得分:0)

查看ViewGroup实施findViewById最终将遍历子项并比较ID,因此我建议您只使用findViewById方法。

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

    final View[] where = mChildren;
    final int len = mChildrenCount;

    for (int i = 0; i < len; i++) {
        View v = where[i];

        if ((v.mPrivateFlags & PFLAG_IS_ROOT_NAMESPACE) == 0) {
            v = v.findViewById(id);

            if (v != null) {
                return v;
            }
        }
    }

    return null;
}