【Android显示学习】UIThread和RenderThread

这里回顾下显示系统的经典示意图

 在进行绘制的时候,RenderThread是怎样被调起来进行渲染的呢,在这里,我们继续通过对一个知识点的学习来作为基础发散点,来认识整个流程,实现整个知识点的贯穿:从点到线,再发散到面。

在view的绘图方法onDraw(Canvas canvas)中,我们可以添加log和堆栈,可以发现,onDraw所在的线程就是主线程,onDraw是在UI线程中执行的,渲染则是另外处理的,

以下方法中的updateRootDisplayList 会调用到view的onDraw方法,实现绘图命令树的构建(DisplayList)

/*frameworks/base/core/java/android/view/ThreadedRenderer.java*/
void draw(View view, AttachInfo attachInfo, DrawCallbacks callbacks) {
    ...
    // 1.记录每个View节点的绘制操作命令,完成绘制操作命令树的构建
    updateRootDisplayList(view, callbacks);
    ...
    // 2.JNI调用同步Java层构建的绘制命令树到Native层的RenderThread渲染线程,并唤醒渲染线程利用OpenGL执行渲染任务;
    int syncResult = syncAndDrawFrame(choreographer.mFrameInfo);
    ...
}

里面的syncAndDrawFrame方法唤醒RenderThread进行处理。

了解了这个主干道,就可以有个大概认识,再去了解各细节。

参考资料:

Android 应用启动全流程分析(源码深度剖析和 Systrace 展示)- 下篇 - 知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值