View.post原理
2021-04-09 11:36:33 0 举报
android 中View.post为什么可以获取到view准确的宽高信息呢,让我从源码的角度来看下具体怎么做到的
作者其他创作
大纲/内容
mRunQueue.post
ViewRootImpl.performTraversals
调用View绘制之前调用
View.post原理
Y
添加进View的等待队列中,实际是一个数组
doTraversal()是在TraversalRunnable里执行的,所以相当于大Runnable包含小的Runnable,虽然先执行dispatchdispatchAttachedToWindow,但是此时measure、layout、draw消息已经存在于了Handle中,所以View队列的消息是在layout之后执行的
遍历所有子view,为每个子view初始化mAttachInfo,然后就会将View的等待队列中的任务post进mAttachInfo的handler中进行处理
mAttachInfo是否为null
doTraversal()
N
直接通过handler post进消息队列,View的绘制结束后就取handler里面的消息进行处理
performTraversals()
View.post
dispatchdispatchAttachedToWindow
dispatch方法中从队列取出任务交给handler处理
收藏
收藏
0 条评论
下一页