Android 开发高手课
张绍文
前微信高级工程师,Tinker 负责人
52722 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
导读 (1讲)
模块一 高质量开发 (25讲)
Android 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

20 | UI 优化(上):UI 渲染的几个关键概念

三缓冲机制Triple Buffering
VSYNC信号
数据测量
Project Butter
硬件加速绘制
Android API level限制
OpenGL ES
GPU的作用
Rasterization
UI适配方法
dp、dpi、ppi、density概念
屏幕碎片化问题
LCD与OLED屏幕
屏幕尺寸、分辨率、厚度
课后作业
硬件加速绘制的问题
UI渲染优化
未来
Android 5.0:RenderThread
Android 4.0:开启硬件加速
OpenGL与Vulkan
CPU与GPU
屏幕与适配
参考资料
总结
Android渲染的演进
UI适配
UI 渲染的几个关键概念
参考文章

该思维导图由 AI 生成,仅供参考

在开始今天的学习前,我祝各位同学新春快乐、工作顺利、身体健康、阖家幸福,绍文给您拜年啦!
每个做 UI 的 Android 开发,上辈子都是折翼的天使。
多年来,有那么一群苦逼的 Android 开发,他们饱受碎片化之苦,面对着各式各样的手机屏幕尺寸和分辨率,还要与“凶残”的产品和 UI 设计师过招,日复一日、年复一年的做着 UI 适配和优化工作,蹉跎着青春的岁月。更加不幸的是,最近两年这个趋势似乎还愈演愈烈:刘海屏、全面屏,还有即将推出的柔性折叠屏,UI 适配将变得越来越复杂。
UI 优化究竟指的是什么呢?我认为所谓的 UI 优化,应该包含两个方面:一个是效率的提升,我们可以非常高效地把 UI 的设计图转化成应用界面,并且保证 UI 界面在不同尺寸和分辨率的手机上都是一致的;另一个是性能的提升,在正确实现复杂、炫酷的 UI 设计的同时,需要保证用户有流畅的体验。
那如何将我们从无穷无尽的 UI 适配中拯救出来呢?

UI 渲染的背景知识

究竟什么是 UI 渲染呢?Android 的图形渲染框架十分复杂,不同版本的差异也比较大。但是无论怎么样,它们都是为了将我们代码中的 View 或者元素显示到屏幕中。
而屏幕作为直接面对用户的手机硬件,类似厚度、色彩、功耗等都是厂家非常关注的。从功能机小小的黑白屏,到现在超大的全面屏,我们先来看手机屏幕的发展历程。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了Android UI渲染的演进过程和关键技术,从Android 4.0的硬件加速绘制到Android 7.0对Vulkan的支持。文章首先介绍了Android图形系统的组成部分,包括Surface、Canvas、Graphic Buffer和SurfaceFlinger等,以及Android 4.0引入的硬件加速绘制。随后详细解析了Android 4.1的Project Butter优化机制,包括VSYNC信号和Triple Buffering,以及新增的性能数据采样和分析工具。在Android 5.0中引入了RenderNode和RenderThread,将GL命令执行放到独立线程,以提高渲染效率。此外,还介绍了Android 6.0和7.0对渲染性能的进一步优化和对Vulkan的支持。总的来说,本文全面解析了Android渲染性能的演进历程和未来发展方向,对于Android开发者具有重要参考价值。文章还提到了硬件加速绘制存在的问题,如内存消耗和兼容性问题,以及在UI渲染方面的痛点。欢迎留言讨论并分享更好的思路和想法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Android 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • ekkoLee
    您好 我们的项目也有很多libhwui的崩溃,占jni的35%以上,可以分享下大概的解决思路和方向吗

    作者回复: 这个崩溃我们发现主要是有两种情况,一个是5.X和6.X的,一个是7.0的。主要是因为view复用,或者两个动画同时播放(例如lottie动画有做set layer null)。 其实路径还是比较多的,所以还是要hook加上日志,寻找清楚场景。

    2019-02-05
    22
  • Geek_2d38e3
    张老师您好,我们的应用也遇到了hwui的问题且占比很高,能简单分享一下思路吗,不胜感激

    作者回复: 主要是通过Hook加日志和xlog日志,定位是哪些页面的问题

    2019-03-26
  • JKnight
    非常希望可以分享如何解决libhwui的崩溃,我们项目中也有很多

    作者回复: 可以看看上面的答复

    2019-03-19
  • 韩增波
    您好 我们的项目也有很多libhwui的崩溃,不知是否可以帮忙提供一下解决思路。多谢。

    作者回复: 正如答复另外一个读者的,libhwui涉及异步渲染的问题。需要具体问题具体分析,具体的解决思路还是通过hook收集更多的信息,看当时是哪些view出问题了

    2019-02-11
  • 哈珀朋友
    老哥Android显示系统说得不错。老哥的风格,由浅入深,授人以渔,非常像一个优秀的学院派教授说课风格,很喜欢,相信其他人也很容易看懂
    2019-02-07
    12
  • 辉 哥
    张哥,新年快乐!
    2019-02-05
    1
  • 啊 菠萝
    看文章链接里的头条方案代码似乎并没有用到反射而是直接赋值?
    2021-06-21
  • Geek_258277
    您好,关于libhwui的崩溃问题,想问下您主要hook了哪些点呢?
    2020-07-21
  • Swing
    “对于不支持的 API,我们需要使用软件绘制模式,渲染的性能将会大大降低。” 是说 开发人员 主动切换成 软件绘制 还是 会自动切换呢? 如果不自动切换。也不支持。会crash吗???
    2020-04-09
    1
  • Neil
    libhwui我们也经常遇到这个怎么解决
    2019-03-19
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部