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访问特定视图。更容易实现。这在基准测试中被证明是正确的。