首页 > 编程知识 正文

android profiler内存分析,view是数据库的什么模式

时间:2023-05-06 10:45:27 阅读:51640 作者:495

我刚在findViewById上为困惑的人写了答案,发现我的理解有差距。 这个问题只是来自知识和好奇心。

想想看:

Button=(Button ) findviewbyid ) r.id.Button;

findViewById返回View的实例,并强制将其转换为目标类。 到目前为止一切都很好。

要设置视图,findViewById根据相关XML声明中的参数生成AttributeSet,并将其传递给View构造函数。

然后,将View实例转换为Button。

AttributeSet是如何顺序传递到Button构造函数的?

编辑

所以我是个困惑的人。(: )。 重要的是,当布局膨胀时,视图层次结构中已经包含视图后代类的实例。 findViewById只需要返回对它的引用。 仔细想想就很明显了-doh .

5作为问题。为了提问,我进行了研究,找到了有关基本过程的完整信息。谢谢@Leonidos操作系统

findViewById什么都不做。 只需浏览视图层次结构并返回对具有请求的viewId的视图的引用。 View已创建并存在。 如果不对特定视图恢复findViewById,则不会进行任何更改。

视图被布局基础设施夸大了。 调用setContentView时,将分析xml布局并创建视图层次。

LayoutInflater传递给Button的构造函数的属性。 检查布局基础设施的源代码。

你知道在视图层次结构中,通过调用正确的子类ctor实例化了引用视图吗?

属性通过布局生成器传递到Buttons构造函数。 检查LayoutInflarot的源代码。

谢谢你的Leonidos操作系统。

你好,谢谢你宝贵的信息.

不要客气)

我不认为findViewById ()正在结构化或实例化View。 在展开布局的视图层次结构中查找具有匹配ID的视图。 View和View组的行为不同。

通过Android源代码:

如果此视图具有指定的id或null (View.findviewbyid ) )将返回相同的view对象,并调用:

protectedviewfindviewtraversal {

if(id==mid ) {

返回时间;

}

返回空值;

}

ViewGroup.findViewById ) )遍历子视图并在这些视图中调用相同的方法。 将调用以下方法:

protectedviewfindviewtraversal {

if(id==mid ) {

返回时间;

}

final View[] where=mChildren;

final int len=mChildrenCount;

for(intI=0; i len; I ) {

View v=where[i];

if () v.mprivateflagsis _ root _ namespace )==0) 0

v=v.findviewbyid(id;

if(v!=空) {

返回v;

}

}

}

返回空值;

}

什么是mId? 在视图类中搜索时,mId已分配给No_ID。 mId被分配给在哪里扫描的View id

@Pragnani mId是分配了视图的ID。 当您/充气机在视图中调用setid(intid )时,mId将设置为提供的int值。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。