站在Google角度看渲染机制,从Android渲染体系设计到Flutter渲染体系设计_android渲染引擎

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注go)
img

正文

google在设计考量中去中和这两个硬件的性能速度,采取的是将两者的绘制速度与频率控制在一定的范围内,也就是我们常提到的60FPS这个阈值上,所以他需要对于屏幕的刷新评率与当前的APP制图速度进行控制,所以他设计了surfaceflinger对于刷新率进行控制,在APP的绘制流程中采用了Choreographer对于制图速度进行控制。

至于控制的策略不外乎就是依赖于一个时间将1s 切割成60份,而这个时间依据就是我们看到的所谓VSYNC信号,VSYNC本质上是驱动提供出来的上一次绘图时间,然后经过surfaceflinger的管理协调,以及同步给APP的Choreographer进行对应的管理,具体结构如下图所示:

1.4.Bitmap数据的绘制保存点与走向

在上图中我们也能够看到在APP与surfaceflinger之间的交过过程中图像数据是采取类似生产消费模式进行沟通的,因为底层是用C的Skia图像渲染引擎,Skia能实现用户手指交互与渲染、文字排版引擎等。在安卓上,系统自带了Skia,在每个平台上都有包含Skia引擎的, 通过Skia引擎生产的相关数据, 会给如到一个固定位置,有surfaceflinger方进行消费获取,具体流程如下图所示

1.5.渲染机制与卡顿的联系是什么?

很多小伙伴对于优化内容没有一个明确的认知,性能优化看上去非常的高大上,但其实就是“细节决定成败”的概念。需要对原理性的东西了解清楚,每一步都有什么不一样,针对每个步骤进行细致化的优化。性能优化是一种思想,而不是一套具体的操作方法。

其主要的套路遵循三个原则

卡顿的痛点有多时候在于大家找不到问题所有,所以前面的渲染机制的支撑就非常关键,透过渲染能够得到卡顿本质出现的问题,具体如下图所示:

还有很多同学是否也有遇到过拿到工具不知道如何去用?这里给大家提供一个思路,一般用三套工具能够你在工作中的所有问题:

1.systrace 能够快速定位事故类型
2.Choreographer能够快速监听帧率变化
3.透过Looper机制能够快速定位代码堆栈信息

2.Flutter 3.0 下UI绘制体系的构建

其实如果大家能站在google的角度去看懂android渲染体系的设计,那么flutter的UI体系构建在大家眼里就不在是一个什么秘密,具体Flutter3.0  框架实现原理如下图所示,跨平台的依据就是在底层的Skia库上面

Flutter3.0 提供了一套Dart API,在底层通过OpenGL这种跨平台的绘制库,也就是下图的GPU部分(内部会调用操作系统API)实现了一套代码跨多端。由于Dart API 也是调用操作系统API,所以它的性能接近原生。虽然Dart是先调用了OpenGL,OpenGL才会调用操作系统API,但是这仍然是原生渲染,因为OpenGL只是操作系统API的一个封装库,它并不像WebView渲染那样需要JavaScript运行环境和CSS渲染器,所以不会有性能损失

对于上图来说,需要理解大量framework源码,你能找到核心代码吗?你能找到合理的优化位置吗?图中相关Framework源码解析文档给大家分享一份,如下图(部分资料整理自互联网):

作为过来人,发现很多学习者都在渲染的面试和实战上面临着很多的困扰,比如:

  • 工作场景中遇到“卡顿”难题,往往只能靠盲猜和感觉,用临时性的补救措施去掩盖,看似解决了问题,但下次同样的问题又会发作,原因则是缺乏方法论、架构思维的指引以及工具支持
  • 能力修炼中,缺乏互联网项目这一实践环境,对“性能优化”只能通过理论知识进行想象,无法认识其在工作实战中的真实面目和实操过程
  • 职场晋升中,只管功能开发,不了解组件设计原理,缺少深入地思考与总结,无法完成高并发、高性能系统设计这类高阶工作,难以在工作中大展拳脚,而有挑战的工作往往留给有准备的人。

总之,一旦遇到性能问题,很少人能够由点及面逆向分析,最终找到瓶颈点和优化方法,可见性能优化需要对知识进行综合的掌握与灵活的运用,属于安卓知识领域的的深水区,也是衡量一个研发能力高低的标准之一

如果你还没有掌握这套主流技术,现在想要在最短的时间里吃透知识点,恶补知识点的,可以参考以下的学习手册:

Android 学习手册

Android Framework底层原理篇:https://qr18.cn/AQpN4J
Android 性能优化篇:https://qr18.cn/FVlo89
Android 车载篇:https://qr18.cn/F05ZCM
Flutter 篇:https://qr18.cn/DIvKma
Android 音视频篇:https://qr18.cn/Ei3VPD
Jetpack全家桶篇(内含Compose):https://qr18.cn/A0gajp
Kotlin 篇:https://qr18.cn/CdjtAF
Gradle 篇:https://qr18.cn/DzrmMB
OkHttp 源码解析笔记:https://qr18.cn/Cw0pBD
Android 八大知识体:https://qr18.cn/CyxarU
Android 核心笔记:https://qr21.cn/CaZQLo
Android 面试题锦:https://qr18.cn/CKV8OZ

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
HhGNXJ-1713592792342)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值