跳转至

Android 性能优化技术月报 | 2024 年 9 月

每个月都会有一些 Android 性能优化相关的优质内容发布,然而,碎片化阅读使得这些知识难以形成完整体系,且容易被遗忘。为解决这些问题,我决定尝试使用技术月报的形式,总结我在最近一个月内查阅的 Android 性能优化相关的优质内容。

月报的主要内容包括:整理展示我在最近一个月所查阅的 Android 性能优化领域的最新技术动态、精选博客,精选视频等内容。

精选博客

鸿蒙next开发进阶 - 任务调度管理

在 Android 开发中,常常会用到拓扑排序来优化启动流程,本文主要介绍了在鸿蒙 next 系统上实现任务调度管理框架 Factotum 的相关内容。具体包括以下内容:

  • 任务调度核心算法:将任务抽象为节点,依赖关系抽象为边,利用有向无环图和拓扑排序解决任务依赖和执行顺序问题。
  • 编译时有向无环图构建:通过自定义 Hvigor 插件在编译时构建有向无环图,能优化性能并避免运行时的死循环问题。
  • 解析抽象语法树:获取源码路径,通过 TypeScript 提供的方法进行抽象语法树解析,以获取任务和依赖信息。
  • 生成拓扑排序产物:利用 Handlebars 模板语言生成编译结果文件,便于后续任务启动时使用。
  • 运行时启动任务框架:通过装饰器在运行时对任务进行映射和启动,解决任务与具体实现的绑定问题。

【书籍推荐】如何从最基础原理做出一个计算机

本文主要介绍了《计算机系统要素-从零开始构建现代计算机》这本书,这本书从与非门开始引导你一步步构建一个计算机,完成本书的所有项目后你将获得以下收获:

  • 从与非门开始构造出一个 16 位的 Hack 计算机
  • 在此计算机基础之上,开发出汇编编译器、堆栈式虚拟机
  • 针对虚拟机设计出高级编程语言 Jack,同时开发出相应的编译器及语言标准库

这本书与其它专注于讲解理论的书不同,它以项目驱动的方式引导你一步步构建一个计算机,让你在实践中学习计算机的基础原理,这样的学习方式更加有趣且容易理解, 也更容易让读者在学习过程中获得正反馈。

着色器预热是什么?

着色器预热?为什么 Flutter 需要?为什么原生 App 不需要?那 Compose 呢?Impeller 呢?

着色器是 GPU 上运行所需的单元,也可以说成是在 GPU 上运行的代码段,skia 把「绘制命令」编译成可在 GPU 执行代码的过程,就叫做着色器编译。 skia 需要「动态编译」着色器,但是 skia 的着色器「生成/编译」与「帧工作」是按顺序处理,如果着色器编译速度不够快,就可能会出现掉帧(Jank)的情况,这个我们可以叫做「着色器卡顿」。

本文主要介绍了 Flutter 使用 skia,原生 App 是用 skia ,那为什么在 Flutter 上会有着色器预热(Shader Warmup)这样的说法?原生是不是也有?那 Compose MultiPlafrom 是不是也需要?具体包括以下内容:

  • Flutter 中的着色器预热:Flutter 使用 skia 作为渲染引擎,首次运行易卡顿,需着色器预热来提升性能,其本质是将部分性能敏感的 SkSL 生成时间提前到编译期。
  • 原生 App 与 Flutter 的区别:原生开发框架作为系统亲儿子,极少需要开发者自定义着色器,而 Flutter 不是,所以需要着色器预热,且在不同平台存在差异。
  • Impeller 的作用:Impeller 提前预编译大多数着色器,减少渲染延迟和卡顿,使用 GLSL 作为着色器语言,不依赖特定客户端渲染 API。
  • Compose MultiPlatform 的情况:Android 上的 Compose 无需着色器预热,iOS 上通过 Skiko 实现渲染,存在着色器问题。
  • 底层渲染管道 API 的比较:OpenGL 存在性能问题,Metal 和 Vulkan 提高了渲染性能和执行效率,Metal 更易使用,Vulkan 更灵活可控。

最后更新: November 17, 2024