首页 > 编程知识 正文

android稳定性分析,android view绘制流程

时间:2023-05-03 23:53:05 阅读:51669 作者:4607

findViewById ) )方法的分析首先,让我们看看在Activity中调用的findViewById方法。

@ nullablepublicviewfindviewbyid (idresintid ) { return getWindow ).findviewbyid ); 调用Window的findViewById ()方法获取结果。

现在,让我们看看窗口的findViewById ()方法。 内容如下。

@ nullablepublicviewfindviewbyid (idresintid ) { return getDecorView ).findviewbyid ) id; }此方法调用getDecorView ()函数以获取顶级视图(实际上,通常获取的应该是View组)。 然后调用顶级视图(视图组)的findViewById )方法。

视图组的findViewById ) )方法的内容如下:

@ nullablepublicfinalviewfindviewbyid (idresintid ) if ) id0 ) { return null; }returnfindviewtraversal(id; }在此判断id是否小于0。 直接方法如果为null,否则将调用findViewTraversal ()方法。

如上所述,层次视图可以是视图组或视图。 让我们分别讨论一下。

顶层视图为View

protectedviewfindviewtraversal (idresintid ) if ) id==mid { return this; }返回空值; }如果顶级视图是View,则直接确定该视图是否为我们要查找的视图,如果是,则返回,否则返回null。

顶层视图为GroupView的话,调用以下方法:

protectedviewfindviewtraversal (@ idresintid ) { //id满足条件时为viewif ) ) id==mid ) { return this; } final View[] where=mChildren; final int len=mChildrenCount; //循环查找符合条件的查看对象(intI=0; i len; I ) { View v=where[i]; 如果if (v.mprivateflagspflag _ is _ root _ namespace )==0)/v为View,则直接确定。 //v为组视图时,递归搜索组视图中的每个childrenviewv=v.findviewbyid (id ); if(v!=null}{returnv; } }返回空值; }循环递归搜索匹配的视图。 找到后返回View内容; 否则返回空值。

源代码总结显示,在Activity中直接调用findViewById ()方法实际上是调用顶级view ) )对象的findViewById ) )方法。 通过调用顶级视图的findViewById方法,实际上可以查找在顶级视图及其子视图中是否存在id匹配的View。

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