ViewRoot的基本工作方式
每棵ViewTree对应一个ViewRoot,它会和WMS进行一系列的通信,包括窗口注册,大小调整等,那么,什么情况下ViewRoot会执行这些操作呢
- ViewTree内部有请求
如某个View对象需要更新UI时会通过invalidate或者其他方式发起请求,随后这些请求会沿着ViewTree层层上传,最终到达ViewRoot,这个ViewTree的管理者再根据一系列情况采取相应措施 - 外部的状态更新
ViewRoot接收来自外部的请求,如WMS会回调ViewRoot通知界面大小改变,触摸事件,按键事件等;
不论内部请求还是外部请求,通常情况下ViewRoot并不会直接处理他们,而是把消息入队后依次处理,ViewRoot内部定义了ViewRootHandler类来对这些消息进行统一处理,而且这个Handler实际是和主线程MessageQueue挂钩的,这也就验证了ViewRoot相关操作是在主线程运行,正因如此,在ViewRootHandler中执行的事件处理不要有耗时操作,否则很可能阻塞线程造成ANR##
TU 11-9 ViewRoot的一般工作流程图
网友评论