[关闭]
@Awille 2021-11-30T15:20:26.000000Z 字数 681 阅读 136

Android View渲染机制

未分类


在ActivityThread->performLaunchActivity中,调用activity.attach中生成windows对象,具体实现为phonewindows,phonewindow中有decor与windowsmanager,windowsmanager实现为windowmanagerimpl, 在activitythread的handleresumeActivity, decorview设置为可见,并且调用windowsmanager的addview方法加载decor,windowsmanger的核心对象是viewrootimpl, 负责管理surface,负责wms通信,触发空间的测量、布局、绘制。

viewrootimpl核心逻辑在invalidate->schedulertraversal中,其中关键成员变量choregrapher.postcallback中,应用程序vsync信号,收到信号会调用mTraversalRunnable,该runnable会调用performtraversal,里面会进行app的measure、layout、draw三大流程,android在5.1引入了renderthread,可以将draw操作从uithread解放出来。

reqeustlayout方法会触发measure、layout、draw流程,invalidate只是标记机一个在脏区域,重新进行draw流程,requestlayout调用意味着频发的travelsal,此时肯定会导致卡顿掉帧问题。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注