Android findViewById vs getChildAt-哪一个更快?

Android findViewById vs getChildAt-哪一个更快?,android,performance,android-view,findviewbyid,Android,Performance,Android View,Findviewbyid,获取层次结构中的视图时,我可以使用这两个功能。虽然它更容易使用,但我经常看到一些建议,认为这可能是一个昂贵的操作,如果可能的话应该避免 因此,使用它会更快吗?关于何时使用哪个更好,是否有任何指导原则?查看ViewGroup实现findViewById最终将循环遍历儿童并比较id,因此我建议只使用findViewById方法 @Override protected View findViewTraversal(@IdRes int id) { if (id == mID) {

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


因此,使用它会更快吗?关于何时使用哪个更好,是否有任何指导原则?

查看
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;
}
@覆盖
受保护的视图findViewTraversal(@IdRes int id){
如果(id==mID){
归还这个;
}
最终视图[],其中=mChildren;
最终整数=mChildrenCount;
对于(int i=0;i
findViewById vs getChildAt-哪一个更快

getChildAt
确实比
findViewById
快,因为它只是在指定的
索引处访问
视图的数组

因此,使用getChildAt会更快吗


确实会,但是您必须知道您要查找的
视图的
索引。如果您没有任何机制来跟踪索引,那么您必须查找它,然后返回到
findViewById
。您可能会重新编写自己版本的
findviewbyd
。我的两分钱,不用担心。

“我经常看到建议”
忽略它们我想findViewById()更快,只需使用ID访问特定视图。更容易实现。这在基准测试中被证明是正确的。