View工作原理(二)导致View重建原因

导致View重建的原因有三个:

1、视图本身内部状态变化引起重绘;

2、view树内部添加或者删除子view;

3、View本身的大小及可见性发生变化。

	这三种情况最后都直接或者间接的调用到了三个方法,invalidate()、requestLayout()和requestFocus(),而这三个函数最终都会调用到ViewRoot中的schueduleTraversals()方法,该方法发起一个异步消息,消息处理中调用performTraversals()开始对整个View进行重新遍历。
能导致调用invalidate()方法的包含三种情况:当应用程序改变视图显示属性时,调用setVisibility();当改变视图Selected状态时,调用setSelected();当改变视图Enable状态时,调用setEnable()。
	导致调用requestLayout()方法的情况包括两种:当应用程序改变视图显示属性时,调用setVisibility(),由于显示或者不显示将影响其他兄弟视图的位置,因此会调用到requestLayout();第二种是应用程序直接或者间接调用该函数,间接调用是指应用程序调用了View类的其他函数,从而间接调用到requestLayout()。
	requestFocus()一般由程序直接调用,间接调用是指当用户按“上/下”、“左/右”键时,相关的处理逻辑会间接的调用该方法。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值