Android Performance

Android Weekly 2025-03 期

Word count: 5.1kReading time: 17 min
2025/01/19
loading

Android Weekly 是由 Gracker 精心整理和发布的技术资讯周刊,每周一准时更新,汇聚了过去一周内与 Android 相关的高质量技术文章、泛客户端技术的最新动态,以及其他值得关注的非技术类文章,内容覆盖广泛,从 Android 开发到跨平台技术,从系统底层优化到前沿技术分享,为开发者提供全方位的知识拓展。

本周刊可以通过微信公众号、知乎专栏、掘金专栏、个人博客、竹白等平台订阅和阅读。

技术文章

  1. 深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比 : 这篇文章对比了 Flutter 和 Jetpack Compose 在 UI 渲染刷新时差异更新(Diff)的实现机制。Flutter 采用线性对账算法,通过最小化查找将 Widget 配置信息更新到 Element 上。Jetpack Compose 则使用基于 Gap Buffer 的 SlotTable 数据结构,在重组完成后才将差异部分更新到对应的 LayoutNode。
  2. 计算体系结构的伟大思想:虚拟内存 2-Lecture 33 : 虚拟内存是现代计算中隐藏的重要技术,为性能优化、安全性和灵活性提供强大支持。它通过地址映射和分页机制,为每个程序提供独立的虚拟地址空间。硬件和软件协作完成地址翻译和页面交换,实现有效的内存管理。虚拟内存在云计算、GPU 计算、数据库等领域广泛应用,并将随着硬件进步不断优化和发展。
  3. 【音视频】视频播放卡顿问题的分析和解决丨音视频实战经验 : 本文主要分析了视频播放卡顿问题的原因及解决思路。文章首先指出视频播放卡顿的主要原因可能是网络波动、解码渲染能力不足以及缓冲策略不合理导致的数据断供。针对这些问题,文章提出了一种基于分层架构的播放器设计方案,包括播放控制层、缓冲管理层、网络数据层和解码渲染层。并重点介绍了核心的三级缓冲策略和动态调整机制。最后,文章还给出了一些其他的优化建议,如网络优化、解码优化、渲染优化、监控优化和体验优化等。
  4. 【直播回放】快手团队的 KMP 鸿蒙落地实践| 2024 Kotlin 中文开发者大会 : 自研 OS 时代,以鸿蒙为首的各类新型操作系统应运而生,这对快手这样以“超大规模工程量级移动端应用”为主要业务载体的公司,带来了巨大的效能挑战。本次分享将结合快手的 KMP 鸿蒙落地实践,从降低 KMP 业务接入成本的角度出发,介绍快手是如何通过建设 KMP 鸿蒙易用性基础设施促进业务落地并提高研发效能的。希望快手的技术方案选型和渐进式落地推广思路,能给同样需要从 0 到 1 落地 KMP 的应用提供参考与帮助。
  5. Android 15- 16kb 页对齐适配大扫盲 : 文章主要介绍了 Android 15 中 16kb 页对齐的适配。包括需要适配的两种情况:未进行 16kb 对齐的 so 及 native 代码中固定硬编码 4kb 部分系统调用异常。讲解了适配过程,如环境准备、so 本身的 16kb 对齐方法,还通过 shadowhook 实战举例,最后总结了三个适配相关的小结论。
  6. Matrix 源码阅读笔记 —— TracePlugin(中) : 文章是关于 Matrix 的 TracePlugin 功能的介绍,包括对 SignalAnrTracer 和 FrameTracer 的分析。SignalAnrTracer 主要监控 ANR 信号,获取系统的 trace 文件,涉及多种语言的代码实现和处理逻辑。FrameTracer 则包括 Android 7 及其以后和以前版本的帧率检测,前者直接使用 API,后者通过 Hook Choreographer 计算帧率,并详细阐述了相关代码的执行逻辑和任务顺序。
  7. 彻底掌握 Android14 Vsync 原理 : 本文主要介绍了 Android14 Vsync 原理,包括 Vsync 是什么及作用、HW-Vsync 计算模型建立、软件 Vsync 信号计算过程与校准、App 和 SF 申请 Vsync 信号的流程等。指出 Vsync 用于同步画面,软件 Vsync 基于 HW-Vsync 计算,有特定参数和计算方式,且存在校准场景和相应流程。
  8. Android 系统性能优化之重排,你知道几个? : Android 系统性能优化之重排解析
    1. Android 系统多方面采用重排技术优化性能,包括 Java 层 multidex、字节码 aot/jit 转汇编、native C++编译优化以及图形栈重排指令、CPU 和 GPU 底层的机器码重排等。
    2. 重排既可以提升性能,但同时也增加了复杂度和可能引入 bug。作者曾遇到过 art 虚拟机中由于指令重排导致的 bug。
    3. 对于 Android app 的 looper 消息循环,可以参考 iOS 的 runloop 做分类分级,而不是一刀切。这是一个值得探索的优化方向。
  9. 能量感知调度(EAS,Energy-Aware Scheduling)的考古日志系列,连载五 : 本系列 patch 为 EAS 相关,主要记录 EAS 从提出讨论,经过多个版本迭代,最终合入主线内核的过程。Quentin Perret 在 Morten Rasmussen 工作的基础上完成了 EAS 的开发合入。本文介绍第二个 patch,schedutil 调频器为适配 EAS 所做的一些准备。本文基于 kernel5.0-rc1。
  10. 能量感知调度(EAS,Energy-Aware Scheduling)的考古日志系列,连载六 : 本系列 patch 为 EAS 相关,主要记录 EAS 从提出讨论,经过多个版本迭代,最终合入主线内核的过程。Quentin Perret 在 Morten Rasmussen 工作的基础上完成了 EAS 的开发合入。本文介绍第三个 patch, 为 EAS 引入一个能量模型管理框架,这是一个相对独立的框架模型,可用于其它子系统。有了能量模型, EAS 可以在满足性能的条件下,选择能效比最高的 CPU 运行。本文基于 kernel5.0-rc1。
  11. 案例分享:图片内存泄漏快速定位方法 : 本文探讨了 Android 平台内存泄漏快速定位的一种新方法,利用对图像内存占用的可视化分析。
  12. android app 渲染流水线图解 : 刷到 Google io 2018 的讲解的 app 渲染流程视频,虽然视频有点老了,新版本 android 可能变化了,但内容不错,讲得很好。整理出来分享给大家。
  13. Jetpack Compose Optimization Checklist : 这篇文章总结了 Jetpack Compose 中优化性能的关键做法,包括利用可跳过性(skippability)、状态管理和延迟组合等高级概念来确保 UI 渲染的流畅性,适用于复杂应用场景。该清单涵盖了懒加载列表、动画和布局等多方面的最佳实践,可以帮助开发者提高 Jetpack Compose 应用的性能表现。
  14. AI 编程蓝皮书 : 作者介绍了使用 AI 编程的流程和工具。
  15. 再学安卓 - binder 之驱动加载 : 本文主要介绍了 Android 内核中 Binder 驱动的初始化过程, 包括 initcall 机制、设备创建、文件系统挂载等。通过对代码的分析和踩点, 全面地展示了 Binder 驱动的启动流程。
  16. perfetto 高阶使用:编译浏览器 UI : 这篇文章主要介绍了 perfetto 编译浏览器 UI 的相关内容。包括参考学习文档、核心步骤、实战步骤、报错处理等。核心步骤为获取源码、执行 tools/install-build-deps –ui 和 ui/run-dev-server 等命令。实战中需满足前提条件,如翻墙、使用特定系统等,并列举了多种报错情况及处理方法,还提到了取巧的离线使用办法。
  17. Android 15 新特性,预测性返回手势 : Android 15 新增了预测性返回手势功能,可以在返回上一个界面之前预览即将返回到的界面。这个功能从 Android 13 开始引入,但直到 Android 15 才默认启用。预测性返回手势可以提升用户体验并降低返回操作的误操作率。但由于需要各 App 进行适配,所以这个功能的推广进度比较慢。
  18. 这样代码命名,总不会被同事蛐蛐了吧 : 本文主要探讨了如何进行良好的代码命名,从而提高代码的可读性和可维护性。
  19. 手机上跑大模型,酷不酷 : 本文介绍了在手机上运行大语言模型的解决方案 mlc-llm 项目。这个项目可以让大语言模型直接运行在手机、电脑等设备上,无需依赖网络。这带来了诸多可能性,比如在手机上与 AI 助手进行交互、避免数据隐私泄露、为游戏等硬件实现智能对话等。此外,作者还分享了在探索 mlc-llm 项目中发现的 conda 软件环境管理工具的使用心得。
  20. Android15 调试专题第九弹:编译 Pixel 内核源码 :这篇文章介绍了如何编译 Pixel 系列手机的内核源码
  21. PMU, AMU 的区别 : 文章简要内容概括:本文对比了 Arm 架构中的 Performance Monitoring Unit (PMU)和 Activity Monitoring Unit (AMU)的区别。它们都有性能计数器用于监控和分析系统性能,但在用途、编程模式等方面有所不同。PMU 主要用于性能分析和调试,AMU 主要用于系统管理和监控,尤其是功耗和性能管理。
  22. 技术管理:目标与对象视角下的洞察与实践 : 技术管理的核心目标是为业务成功提供全方位、深层次的技术支撑与保障,通过技术创新与规划助力商业目标的实现,同时在满足技术人员精神层面(如个人技术进步、能力提升)和物质层面(如薪资、奖金等)核心诉求的基础上,激发其工作热情与创造力。优秀的技术管理者应注重培养团队成员的技术领导力,打造具备持续进步能力的卓越团队,并在与非技术管理者争取团队利益时,勇于突破心理束缚,积极为团队争取资源与支持。
  23. Android anr 排查之 sp 卡顿 : 这篇文章主要分析了 Android 开发中 SharedPreference 引起的主线程卡顿和 ANR 问题,并提出了解决方案。SharedPreference 的 apply 操作会在主线程执行写入操作,可能导致主线程卡顿,而页面退出时,ActivityThread 会阻塞等待 SharedPreference 写入完成,从而进一步引发 ANR 问题。为了解决这一问题,文章提出通过反射替换 SharedPreference 的内部实现,避免主线程卡顿和 ANR,并对这一优化方案进行了详细说明。
  24. 音视频基础能力之 Android 音频篇 (五):史上最全的音频渲染总结 : 这篇文章是音视频基础能力之 Android 音频篇的第 5 篇,主要介绍了 Android 平台下音频渲染的几种方式。包括 AudioTrack 的初始化、开始渲染、停止渲染的步骤及相关参数设置,OpenSL 的初始化、播放、引入等流程,AAudio 的关键流程及播放控制,Oboe 的引入方式。还提及了硬件音视频能力与操作系统的关系及系列文章的相关链接。
  25. 2025 稳定性业务研讨问题 : 这篇文章从能力、管理和流程三个方面探讨了应用稳定性业务的改进方向。在能力方面,需解决三方应用的内存泄露、无响应故障等“硬骨头”问题,并利用图像检测、事件旅程检测等技术突破,同时提升 AI 深度遍历测试、自动化测试生成能力以及竞品对比测试和逆向能力;系统稳定性能力已较完善,可通过小幅改进进一步优化。在管理方面,需更好地协同管理芯片厂家导入基线、Google GKI 升级变化等外部不可控因素,以及三方应用升级引发的问题。在流程方面,需加强应用市场上架测试流程和自研需求开发质量的流程管理,以全面提升稳定性业务的效率和效果。
  26. CUDA 内存管理器 : 内存管理器提供了内存分配的抽象接口,供 CUDA 驱动程序的其他单元或通过 cuda runtime API 的用户层 API 使用。它还提供了在主机(Host)和设备(Device)之间共享已分配内存的抽象接口。CUDA Driver API 以内存对象(Memory Objects)的形式看待内存分配。一个内存对象表示分配的一块内存。它抽象了内存管理中的所有层次,并为 CUDA 驱动程序的其他单元提供 API,用于 malloc/free 和 mmap/unmap 内存,以及其他的辅助功能。为了避免内存碎片化,内存对象是从一个更大的固定大小的内存块(Memory Block) 中分配的。每个内存块都有一个内存描述符(Memory Descriptor),其中包含与内存块关联的所有内存属性。内存管理器负责维护给定 CUDA 上下文中分配的所有内存块。

非技术文章

  1. 讨论胶水工作 : 这篇文章讨论了在软件工程团队中出现的”胶水工作”(glue work),即那些不直接产生代码却对项目成功至关重要的工作,例如帮助他人提高效率、更新路线图、与用户沟通等。文章描述了一位优秀的”胶水工作”者如何由于团队和组织没有认识到这种工作的重要性而无法获得晋升,最后不得不考虑转向更加”可量化”的非技术性工作。
  2. 成长创业笔记 6:2025 年稳步前行,家政小程序迭代新版本,继续出发 : 该文章主要介绍了作者独立开发者小张对其家政小程序的迭代更新与反思。
  3. vol28.信息过载自救指南 : 本文从信息过剩、信息茧房、 FOMO(害怕错过)和注意力涣散等多个原因分析了信息过载的产生,并提出了一些应对措施,包括保持无聊、找到自己的母题、构建信息获取系统等。文章还提供了一些优质内容的链接推荐。
  4. 为什么韩国明明是发达国家却总是一副吃不起肉的样子? : 回答和评论都是精华:大学四年所有课都可以不去,也要牢记楼主的这篇创作,这教会了我们如何思考,以及对于人生的规划,将大问题拆解成可以践行的小问题
  5. 新疆二十日(上):雪域沙海,我的北疆探索之旅 : 本次新疆的行程全程自驾,从北疆到南疆的 20 天里大概行驶了超过 5000 公里。我们从上海直接飞抵伊宁,途径赛里木湖、克拉玛依、喀纳斯、乌鲁木齐、吐鲁番、哈密、库车、阿克苏、塔县,最终在喀什返程。一路上,我们穿越了阿禾公路,独自畅游在无际的雪山中;也走过了沙漠“大海道”,看到了独特的雅丹地貌;还有惊无险地通过了塔莎古道,重温了当年西游玄奘之路。在北疆,我们看到了冬季的白雪皑皑;在南疆,我们也领略了晚秋的胡杨林,即便现在已踏上归途,仍旧让我们流连忘返。
  6. 新疆二十日(下):古道高原,南疆的冰与火之歌 : 本文是《新疆二十日(上):雪域沙海,我的北疆探索之旅》的后续章节,记录了我们从北疆驶向南疆的旅程。如果说北疆的雪山、湖泊和荒野赋予了这段旅途以雄浑壮丽,那么南疆则以胡杨林、沙漠和古道为我们展开了一幅多彩而深邃的画卷。在南疆,我们将继续追寻丝路的遗迹,穿越塔克拉玛干沙漠,领略胡杨林的秋末辉煌,也将重走玄奘的西游足迹,踏上塔莎古道的荒凉与壮美。
  7. 对父母的和解 : 在我年纪轻轻、见识稍浅之时,我的父亲曾给我些许建议,至今仍萦绕在我的心头。他说:“当你想要批评某人时,你要记住,这个世界上并不是所有人都拥有你的那些条件。”
  8. 人到中年,减肥后维持体重不反弹一年的感悟 : 中年人如何在减肥后稳定体重并防止反弹
  9. 为了帮助你回忆旅行足迹,我开发了「山河旅记」 : 「山河旅记」是一款专注于记录个人旅行经历的应用。它提供了简单高效的各种记录功能,如自动生成旅行足迹、支持批量导入照片、建立旅行图谱等,帮助用户轻松保存旅途中的点点滴滴,方便日后回忆重温。应用采用完全本地存储的设计,确保数据安全性,并计划持续完善更多实用功能,让每个旅行者都能拥有一本独一无二的旅行手记。
  10. 如何优雅地开启个人博客? : 最近陆陆续续收到了一些朋友关于想要开启个人博客的想法,有些是想通过公开输出,倒逼自己一把;有些是本来就有记录的习惯,希望拥有自己的一个独立博客;有些则是希望通过书写、记录,去发现探索自己的内心。各有目的和需求,但是最终都会碰到一个开启博客问题:如何写呢,如何分类自己的思想呢,如何去搭建呢,如何跨越自己的羞耻心公开教育自己呢,如何去持续稳定输出呢,想想就有一堆问题,有些是心理上的,有些是技术上的,有些是写作输出上,各有不同,这些问题都会导致在开启个人博客这件事上碰到诸多阻碍,而长期停滞不前,随后不了了之。

打点鸡血

关于胶水工作:

img

推广

纯银的产品分析专栏,主要是为了扩展视野:

  • 📊 产品分析的重要性 在产品分析中,关注用户在产品中的行为比关注产品设计更为重要,因为用户行为能准确反映产品设计的效果。
  • 🔍 用户使用场景分析 产品分析应涉及用户使用场景、需求定位和市场分析,以确保产品结构和逻辑符合实际需求。
  • 📖 系列产品分析 纯银系列的产品分析包括多季的内容,涵盖广泛的话题和不同的市场需求探讨,适合对产品策略有兴趣的读者。 img

关于作者

下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!

  1. 掘金 - Gracker:https://juejin.cn/user/1816846860560749
  2. 知乎 - Grackerhttps://www.zhihu.com/people/gracker
  3. 个人博客 - Android Performance : 写东西的地方
  4. 个人介绍 - 欢迎加微信群组多多交流 :里面有个人的微信和微信群链接。
  5. 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
  6. 本周刊 Newsletter 订阅https://androidweekly.zhubai.love/ ,支持微信和邮箱订阅
  7. 微信公众号 Android Performance
    img
  8. Android性能优化知识星球 : 个人运营的一个知识星球,欢迎加入,多谢支持~ img
CATALOG
  1. 1. 技术文章
  2. 2. 非技术文章
  3. 3. 打点鸡血
  4. 4. 推广
  5. 5. 关于作者