Android Performance

Android Weekly 2025-16 期

Word count: 6.1kReading time: 21 min
2025/05/19
loading

Android Weekly 是一份专注于 Android 技术生态的周刊,每周一更新。本周刊深入挖掘 Android 系统架构、性能优化、跨平台开发、AI 等领域的高质量技术内容,为开发者提供持续的知识更新与技术洞察。

订阅渠道:[微信公众号] | [知乎专栏] | [掘金] | [RSS]

技术文章

  1. 程序员的自我修养 - 第三章 目标文件里面有什么: 本文深入探讨了目标文件的结构及其组成部分,重点介绍了 ELF 文件格式的内容,包括文件头、段表、符号表、重定位表等,并通过实例分析了各个段的具体作用和存储内容。同时,文章还讲解了符号修饰、强弱符号与引用、C++与 C 的兼容性以及调试信息的相关知识,帮助读者全面理解目标文件的内部结构与工作原理。
  2. 有时候你 APP 发生的 ANR 不是你的错-分享 1 个 Google 工程师没 bug 改出 bug 的一个案例: 这篇文章通过一个有趣的案例,分析了某些情况下 APP 发生的 ANR(应用程序无响应)并非开发者的错误,而可能是底层代码重构导致的问题。文章以《王者荣耀》APP 的 ANR 问题为例,讲述了 Google 工程师在 2015 年为解决潜在问题进行代码重构时引入了一个新 bug,随后在 2017 年被手机厂商发现并修复的过程。
  3. 再来谈谈 GPU 体系结构及互联: 本文主要探讨了 GPU 体系结构及互联技术的发展、挑战和未来方向。文章结合作者的经验与行业实例,分析了 ScaleUP 与 ScaleOUT 架构的优劣、内存访问优化、网络处理器设计以及国内外相关技术的现状与趋势。
  4. 后 AOSP 时代还能贡献代码吗?: 后 AOSP 时代,尽管 Google 将 Android 开发转为内部分支,但代码仍然开源且可贡献。文章通过一个具体问题的解决过程,详细展示了如何在后 AOSP 时代贡献代码,包括源码下载、分支切换、问题修复、提交代码以及 Google 代码审查流程等,同时也探讨了后 AOSP 时代贡献代码的挑战与局限。
  5. OPPO ColorOS 极光引擎 并行绘制架构: OPPO 去年推出的极光引擎采用行业首创的并行绘制架构,显著提升了 Android 系统的流畅度和用户体验。通过并行响应和统一绘制技术,解决了传统 Android 系统中点击不跟手、页面过渡闪跳的问题,同时优化了动画效果和触控响应速度,提升了整体性能和功耗效率。
  6. Flutter 在全新 Platform 和 UI 线程合并后,出现了什么大坑和变化?: Flutter 在 3.29 版本中合并了 Platform 和 UI 线程,为后续原生语言与 Dart 的直接同步调用奠定了基础。然而,这一功能的实现也带来了新的问题,包括在 Android 调试时可能触发 ANR 弹框,以及应用启动时的延迟增加。为解决这些问题,Flutter 引入了新的线程模式 kMergeAfterLaunch,通过单独的启动线程优化了启动性能。此外,macOS 也完成了线程合并,未来可能在该平台上支持更多自定义功能。
  7. 基于 eBPF 用户态调度器的 Android 系统性能优化与应用实践: 第三届 eBPF 大会 分会场 3 古钦辉_肖俊 基于 eBPF 用户态调度器的 Android 系统性能优化与应用实践
  8. 大厂实战:TikTok 跨平台框架 Lynx 终于开源: TikTok 最近开源了其自研的跨平台框架 Lynx,该框架通过 Web 技术实现跨平台开发,具有高性能和高开发效率的特点。Lynx 采用双线程架构和高性能渲染技术,支持多端兼容性,并已在 TikTok 的多个核心场景中应用,表现出色。尽管 Lynx 在性能和迁移成本上有优势,但其社区支持尚不如 Flutter 等传统框架。
  9. GPU 火焰图的探索-iaprof: 近期,Brendan Gregg 所在的团队开源了一款面向于 intel 平台的 ai 火焰图生成工具,本文主要介绍其中提到的相关可视化方法和工具。 AI 火焰图 AI 火焰图我们在上一篇介绍 GPU profiling 的文章中曾经介绍过,通过不同的颜色将 CPU 和 GPU 的调用栈混合在一起进行分析: 绿色框是 AI 或 GPU 加速器上运行的实际指令,浅绿色显示这些函数的源代码
  10. 抖音 renderD128 系统级疑难 OOM 分析与解决: 抖音长期存在 renderD128 内存占用过多导致的虚拟内存 OOM,且多次出现 renderD128 内存激增导致 OOM 指标严重劣化甚至发版熔断。因受限于闭源的 GPU 驱动以及现场有效信息极少,多个团队都进行过分析,但一直未能定位到问题根因,问题反馈到厂商也一直没有结论。以往发生 renderD128 内存激增时,解决办法往往都是通过二分法去定位导致问题的 MR 进行回滚(MR 代码写法并无问题,仅仅是正常调用系统 API),但是回滚业务代码会影响业务正常需求的合入,也无法从根本上解决该问题,每次也会消耗我们大量人力去分析排查,因此我们有必要投入更多时间和精力定位根因并彻底解决该问题。在历经数月的深入分析和排查后,我们最终定位了问题根因并彻底解决了该问题,取得了显著的 OOM 收益,renderD128 内存问题导致的发版熔断也未再发生。
  11. Android 丨如何解决 CFI 检测报错: 在 Android 的语境里,CFI 有两种含义。一种叫作”Call Frame Information”,是 DWARF 调试信息里的内容,主要用于回溯调用栈时找到每一帧的地址。另一种叫作”Control Flow Integrity”,是 Clang 中引入的一种安全机制,通过指令插桩来防止某些恶意攻击。这里我们讨论的 CFI 属于第二种情况。按理说,这种安全机制离我们应该很远,不了解也无所谓。但实际情况却是,开启了 CFI 的模块多少都遇到过 CFI 的检测报错。奇怪,在我们的测试环境里又没人恶意攻击,那这些检测报错到底是什么意思呢?下面列举几个常见的 CFI 的错误示例。
  12. Jit/Profile Saver 线程工作流程-基于 Android S: 经常在分析问题或者看 trace 文件时遇到 jit thread 和 Profile saver thread,本文基于 Android S ART 源码,介绍下我们常见的 jit 线程和 Profile Saver 线程的工作流程。
  13. 手把手教你 uinput 命令的使用方式-重学安卓 input 子系统: android 系统中自带了一个 uinput 命令,但是这个命令其实对于使用者并不友好,因为本身命令的使用没有相关的 help 提示,命令的使用方式基本上整个互联网上都没有相关的文章,那马哥只能为 vip 学员们开荒啦,所以本文要带大家学习一下如何使用 uinput 命令实现 input 事件的注入。
  14. Compose Multiplatform for iOS 稳定版已经发布: 大早上就看到了一条令人激动的消息,JetBrains 在几个小时前发布了 Compose Multiplatform 1.8.0 版本,CMP for iOS 已经稳定并可以投入生产,等了这么久终于等到这一天了。
  15. 编译器优化那些事儿(22):LLM for Vectorization: 随着大语言模型(Large Language Model, LLM)技术的迅猛发展,其应用已从通用领域快速渗透至编译技术等专业场景。本文将聚焦大模型在编译优化中的创新实践,重点探讨基于大模型的自动向量化的优化方法及其实现机制。
  16. android app 绘制数据的流转: 这篇文章详细介绍了 Android 应用中数据绘制的流程,从数据的序列化存储到最终在屏幕上的显示。它涵盖了 DisplayListData 的存储与操作、SkiaRecordingCanvas 的数据流转、RenderNode 的数据同步以及 OpenGL ES 指令的执行流程,最终通过 SurfaceFlinger 完成图层合成和显示。
  17. React Native 前瞻式重大更新 Skia & WebGPU & ThreeJS,未来可期: 近日,React Native 发布了前瞻式的重大更新,主要围绕 Skia & WebGPU 等场景来布局未来的跨平台渲染场景,主要目的是在“追求与 Web 的对称性”的同时,提供更强大的客户端渲染支持。
  18. 经典 binder 面试题:binder 调用自己进程中的方法时是否会经过 binder 驱动?: 经典 Binder 面试题:Binder 调用自己进程中的方法时是否会经过 Binder 驱动?文章通过分析 Binder 工作原理,回答了这一问题,并详细剖析了相关代码和流程,说明了当 Binder 调用发生在同一进程中时,不会经过 Binder 驱动的原因。
  19. Android APP 系统渲染管线优化小点: 这篇文章主要讨论了 Android 应用系统渲染管线中的性能优化方法,特别是在 measure()、GPU 频率提升和 shader 编译持久化等方面的优化。
  20. LWN:让 CPU 调度器考虑 Cache!: WN 文章探讨了如何让 Linux 内核的 CPU 调度器更好地考虑缓存局部性,以提高多线程任务的性能。文章介绍了 Chen Yu 和 Peter Zijlstra 提出的改进方法,旨在优化任务在共享缓存域中的分布,减少因迁移任务导致的性能损失,并解决负载均衡和任务聚集之间的冲突。
  21. 分享我几年前写的内存屏障原理与实例的 ppt: 分享了一个关于 ARM64 内存屏障原理与实战的 PPT,内容涵盖内存屏障的基本概念、内核 API 以及 5 个实例分析。
  22. 如何查看项目是否支持最新 Android 16K Page Size 一文汇总: 本文详细介绍了如何检查项目是否支持最新的 Android 16K Page Size,并提供了多种方法和工具来解决相关问题,包括脚本检测、Google Play 资源管理器检查、工具分析以及适配建议。
  23. Eliminating Array Bounds Checks: 本文探讨了如何通过优化代码和消除数组边界检查来提升性能,主要以 Kotlin 代码和 ARM64 汇编为例,分析了不同情况下的指令生成及优化方法。文章还通过实例说明了如何帮助编译器减少冗余检查,并提出了一些具体的优化建议。
  24. Merge Your Computations: Romain Guy 的博客文章讨论了一种优化性能敏感代码的技术——通过合并或手动内联函数来减少不必要的临时对象分配和重复计算。以 Jetpack Compose 的矩阵变换代码为例,手动合并函数后,指令数从 1,062 减少到 168,性能提升显著。这种优化适用于性能关键场景,但需注意自动优化工具(如 R8 和 ART)并非总能实现类似优化。
  25. 分享一个 android app 启动出现 Uninterruptible Sleep (non-IO) 性能问题分析: 这是关于一个 Android 应用启动过程中出现 Uninterruptible Sleep(非 IO)性能问题的分析文章。通过代码分析和日志追踪,作者发现问题根源在于模拟器环境中文件描述符不足导致的内核扩容操作,而不是应用代码本身的问题。最终通过调整文件描述符限制解决了问题。
  26. ebpf 工作原理介绍——ebpf 指令集及虚拟机: ebpf 的历史,发展,意义就不介绍了。这篇文章就从一个未接触过 ebpf 工作原理的开发者的角度,通过代码以及编译工具,去理解 ebpf 的工作原理。是一篇原理介绍,也是一篇我学习 ebpf 工作原理的笔记。Ebpf 前身是 bpf,也被称为 cbpf,本文主要介绍的是 ebpf,所有 BPF 都是 ebpf 的缩写。
  27. 一图看懂 Android 16 新特性: 一图看懂 Android 16 新特性
  28. Android app 虚拟机内存的性能优化思路: 文章提出了针对 Android 应用虚拟机内存优化的多种方案,包括利用启动时 class 加载顺序进行 JIT 优化、帧间隔空闲时间的小范围 GC、CPU 繁忙时动态提升 GC 内存阈值、后台状态下按需 GC,以及通过区分热数据和冷数据进行内存压缩,以全面提升内存管理效率并优化性能。
  29. 结合 Fresco 源码,深入分析 CloseableReference 的内存管理机制: 结合 Fresco 源码,深入分析其在 Fresco 缓存机制中的作用 CloseableReference 是 Fresco 内存管理的核心组件,用于确保图片资源(如 Bitmap 和 PooledByteBuffer)的安全分配和释放,防止内存泄漏,尤其在高并发和复杂图片加载场景下表现出色。
  30. Android 应用内存分析与优化 - 工具篇之 Booster: 在原理篇中,我们发现在 App 内存的分布中,Code 是占大头的部分,所以我们可以从 App 体积方面想办法,通过减小 App 体积达到降低内存的目的,同时,根据权威的机构分析,体积与用户下载和留存有很大的联系,总之体积减小有很大的好处,本篇研究了一下滴滴开源的 Booster 工具,减小包体积,优化 App 性能。
  31. Android 应用内存分析与优化 - 理论篇: 内存优化一直是一个很重要但却缺乏关注的点,内存作为程序运行最重要的资源之一,需要运行过程中做到合理的资源分配与回收,不合理的内存占用轻则使得用户应用程序运行卡顿、ANR、黑屏,重则导致用户应用程序发生 OOM(out of memory)崩溃。在你认真跟踪下来可能会发现内存出现问题的地方仅仅只是一个表现的地方,并非深层次的原因,因为内存问题相对比较复杂,它是一个逐渐挤压的过程,正好在你出现问题的代码那里爆了,所以针对应用的内存问题开发者必须多加关注。在内存优化开始分析之前,我们需要先搞清楚应用当前占用了多少内存,分别是什么,它们的概念指的是什么,另外,我们使用什么工具和方法进行分析,然后再进行相应的优化,我们需要解决什么问题,比如内存抖动、内存泄露、频繁 GC、锯齿状、内存溢出等。
  32. 卡顿优化总结: 本文详细介绍了安卓应用中卡顿优化的原理、原因、性能分析工具及具体解决方案,涵盖绘制流程、渲染流程、布局优化、动画优化等多个方面,提供了全面的指导和实践建议。
  33. Android Weekly Issue #675: Android Weekly Issue #675
  34. Android 16 版本系统优化实践: Android 系统持续在发展,近两年 Google 也持续优化关键组件的性能,在最新的 16 版本上看到了 Google 一些新的优化实践,值得我们去参考学习

杂记

  1. 独立开发周记 114:第一次参加独立开发者线下聚会: 独立开发者分享了第 114 周的周记,记录了他在开发工作、线下活动和个人生活中的点滴。这一周他完成了多个 App 的更新和优化,参与了首次线下独立开发者聚会,并分享了阅读、影视和游戏体验。
  2. 卢尔辰:知识的利息比银行利息更高: 卢尔辰在文章中探讨了“知识的利息”这一概念,认为知识的增长和应用就像财富的利息一样,通过学习和实践可以实现复利效应,同时强调终身学习的重要性及其对认知和财富增长的影响。
  3. PKUFlyingPig/cs-self-learning: 这篇文章介绍了一个名为“CS 自学指南”的开源项目,旨在帮助计算机科学初学者通过高质量的在线资源进行自学。作者基于自身经验,分享了课程推荐、自学规划及资源整合,并鼓励社区共同贡献内容。
  4. 工作十年,一个 Android 开发者的自我修养: 这篇文章是一位 Android 开发者的职业回顾与感悟,作者通过分享自己的工作经历,总结了技术成长、职业规划、时间管理等方面的建议,同时反思了行业现状和个人发展路径。文章从具体经历出发,逐步引申出对技术深耕、创造力、保持逆熵等主题的深入思考。
  5. 四月小结:开始有睡后收入: 四月小结:开始有睡后收入
  6. Productivity: 这篇文章探讨了如何通过工具和方法论提升个人工作效率和生活质量,作者分享了自己的时间管理、任务规划、工具使用及休息方法等经验。
  7. 视野修炼第 119 期 | 终端调色: 欢迎来到第 119 期的【视野修炼 - 技术周刊】,文章介绍了多个技术相关主题,包括终端调色盘、开源工具、AI 工具以及趣图推荐等内容,旨在分享前端开发和技术领域的最新动态与实用工具。
  8. 体验碎周报第 233 期(2025.5.19): 系统的知识来源于对碎片的整理和思考,为了更好地输出系统知识,记录本周我发现的体验设计和思考,为构建系统知识做准备。
  9. 如何理解人生是旷野?: 如何理解「人生是旷野」这句话?文章从作者的个人经历出发,探讨了职场轨道与自由模式之间的差异。对于上班族而言,人生如同轨道,路径明确;而选择自由职业或个体经营后,人生则如旷野般充满可能性,但也存在不确定性和风险。

AI

  1. [译]AI 算力民主化 第九部分:为什么硬件公司难以构建 AI 软件?: 文章探讨了硬件公司在构建 AI 软件时面临的结构性挑战,分析了 NVIDIA CUDA 的统治地位及其生态系统的强大优势,同时揭示了硬件公司在激励机制、资源分配和技术演进上的局限性,最终提出要实现 AI 算力民主化需要彻底重构规则。
  2. 办公类 AI 初探:扣子空间: 办公类 AI 被认为是未来 AI 产品的风口,因其在企业和个人办公市场的巨大潜力。文章以“扣子空间”为例,介绍了其通过自动调用智能体(Agent)实现零基础办公任务处理的能力,支持文档撰写、表格生成、PPT 制作、地图分析等多种应用场景,并内置专家系统提供深度分析功能。扣子空间以自动化和易用性为核心设计,显著提升了办公效率,是一款高完成度的办公助手型 AI 产品。
  3. Trae 重磅更新:AI 编程+智能体+MCP,言出法随的新世界入门: 文章介绍了 Trae 这一 AI 编程工具的最新更新,包括 MCP(大模型上下文协议)、智能体功能以及其实际应用。这些功能结合 AI 编程技术,能够实现“言出法随”的编程体验,例如通过自然语言生成代码、调用工具等。文章还详细讲解了 MCP 的配置步骤、常见问题及实际操作案例。
  4. 从混乱到可控,我重构了 Cursor 的开发流程: 从混乱到可控,文章讲述了作者如何通过重构开发流程,利用 AI 工具(如 GPT 和 Cursor)实现更高效、更可控的编程实践。作者分享了从需求分析到项目完成的详细步骤,并提出了一种 AI 协作方法论,通过任务清单和日志追踪来控制 AI 的执行,最终成功开发了一个 Chrome 插件(Prompt 管理工具)的 v0.1 版本。
  5. 大厂失业后,我被迫用 cursor 开发出了第一款海外产品谋生: 大厂失业后,作者通过自主开发尝试出海创业,利用工具 Cursor 推出了一个在线倒影文字生成器网站 AmbigramGeneratorOnline.org。该网站能够快速生成具有艺术效果的倒影文字,支持多种字体和风格,适用于个性化设计、礼物定制等场景,且完全免费,旨在让用户以简单方式实现创意表达。
  6. 最近爆火的 MCP 究竟有多大魅力?MCP 开发初体验|得物技术: MCP 全称 Model Context Protocol,是由 Anthropic 公司在 2024 年 11 月推出一个开放协议,主要用于标准化应用程序向大语言模型提供上下文的方式。可以将 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 为设备连接各种外设和配件提供了标准化方式一样,MCP 为 AI 模型连接不同的数据源和工具提供了标准化方式。
  7. 基于 MCP 的 AI Agent 应用开发实践: 本文详细介绍了基于 MCP(Model Context Protocol)协议的 AI Agent 应用开发实践,通过 MCP 实现工具与 AI Agent 的解耦,带来了开发范式的转变,并展示了 MCP 在 AI Agent 开发中的具体应用场景和未来发展方向。
  8. [Agentic AI] 使用 Cursor 作为 AI 的通用入口: 本文探讨了如何使用 Cursor 作为 AI 的通用入口,分析了其在问答、翻译、搜索和知识管理等任务中的应用优势与局限性,并通过实验展示了 Cursor 在 Agentic AI 场景下的潜力。
  9. 我对 Codex 的初步评测结果:AI 编程智能体不再是需要结对编程的实习生而是外包员工: 如果说 Cursor 是需要我们结对编程才能干活的实习生,那么 Codex 就是外包员工,任务甩过去就不用管了,完成后验收一下,不合格就让它重做一遍,直到满意为止。最关键是你可以拥有无数个这样的只需要验收的外包员工。

鸡血

投稿指南

欢迎投稿分享您的:

  • 技术博客
  • 实践经验
  • 工具推荐

投稿方式:

  • 公众号后台回复”投稿”
  • 本周刊下面留言
  • 发邮件 :dreamtale.jg@gmail.com
  • 微信联系:Gracker_Gao

关于作者

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

  1. 掘金 - Gracker:https://juejin.cn/user/1816846860560749
  2. 知乎 - Grackerhttps://www.zhihu.com/people/gracker
  3. 个人博客 - Android Performance : 写东西的地方
  4. 个人介绍 - 欢迎加微信群组多多交流 :里面有个人的微信和微信群链接。
  5. 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
  6. 微信公众号 Android Performance
  7. Android 性能优化知识星球 : 个人运营的一个知识星球,欢迎加入,多谢支持~

版权声明

  • 本周刊遵循 CC BY-NC-SA 4.0 协议
  • 转载请注明出处:Android Weekly 第 X 期
  • 欢迎订阅、分享,让更多开发者受益
CATALOG
  1. 1. 技术文章
  2. 2. 杂记
  3. 3. AI
  4. 4. 鸡血
  5. 5. 投稿指南
  6. 6. 关于作者
  7. 7. 版权声明