阅读视图

发现新文章,点击刷新页面。

Android Weekly 2025-02 期

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

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

技术文章

  1. Tools, not Rules: become a better Android developer with Compiler Explorer : 该文章介绍了一个名为 Compiler Explorer 的工具,它可以帮助 Android 开发者了解编译过程中的优化机制。该工具允许开发者探索 Java 和 Kotlin 代码是如何转换为汇编指令的,以及 ART 编译器在此过程中进行的各种优化。文章通过几个具体的代码示例,展示了 Compiler Explorer 如何帮助开发者理解编译器的工作原理,从而更好地编写高效的 Android 代码。
  2. 几乎是当下最详细的 AOSP 编译与调试运行指南 : 这篇文章是关于 AOSP 编译与调试运行的详细指南,包括 Android 13 源码在 Ubuntu 环境下的全量下载与编译,源码导入 AS 的两种方式及相关操作,介绍了源码目录结构、编译产物信息、代码搜索和单独模块编译,还阐述了系统调试方法,如源码修改编译运行、断点调试系统代码(Java)。
  3. 闲谈丨像福尔摩斯一样去解 Bug : 解决 Bug 时,要像福尔摩斯一样收集充分的数据和工具,深入了解原理而非表象;要拥有广博的视野,洞见问题的本质;要对已解决的问题保持学习和思考,不断积累经验。同时还要客观认识 Bug 的性质和影响,优先处理高风险 Bug,考虑用折衷方式应对无法根治的问题。
  4. CPU 使用率高就一定有效率吗? : 这篇文章讨论了 CPU 使用率高并不一定意味着效率高的问题。作者通过具体实验分析了线程并发计数时悲观锁(synchronized)和自旋锁(CAS、spin_lock)的性能差异,并对自旋锁进行了优化。最后总结了内存墙是导致性能问题的核心原因,提出了几个相关的案例供读者参考。
  5. AI Agent(智能体)技术白皮书(Google,2024) : 本文介绍了基于生成式 AI 的”Agent”的基本架构和工作原理。Agent 是一个能够利用工具和编排层来扩展语言模型能力的应用程序,可以执行复杂任务并与外部系统交互。文章详细探讨了构成 Agent 的三大核心组件:模型、工具和编排层。其中工具是连接模型和外部世界的关键,包括 Extensions、Functions 和 Data Stores 等形式。此外,文章还介绍了通过上下文学习、基于检索的学习和微调等方式来提升 Agent 性能的方法。最后,文章给出了基于 LangChain 快速构建 Agent 原型的示例代码。
  6. LLM-Powered GUI Agents in Phone Automation: Surveying Progress and Prospects : 本文详细介绍了 vivo AI Lab 联合香港中文大学 MMLab 等团队发布的关于大模型驱动的手机自动化智能体的综述论文。论文长达 48 页,覆盖了 200 余篇文献,系统总结了基于大模型的手机自动化技术的发展历程、技术框架、应用场景及未来挑战。文章首先回顾了传统手机自动化技术的局限性,如通用性差、维护成本高、意图理解能力弱等,随后介绍了大语言模型(LLM)如何通过自然语言理解、多模态感知和推理决策能力,推动手机自动化的智能化发展。论文还详细探讨了手机 GUI 智能体的框架设计、模型选择与训练、数据集与评估方法,并指出了未来研究的方向,如数据集多样性、设备端部署效率和安全问题等。
  7. Android 性能优化:内存优化(理论篇) : 这篇文章主要介绍了 Android 内存优化的理论知识,包括内存基础知识、内存分配、单进程内存上限、垃圾回收算法、引用类型、优化必要性及思路等。指出内存优化可避免 OOM 等问题,提升系统效率和用户体验。优化思路涵盖数据收集分析、借助工具排查问题、针对问题优化及制定长效治理策略。
  8. Android 性能优化:内存优化(实践篇) : 这篇文章是关于 Android 性能优化中内存优化的实践总结。先介绍了内存构成和获取内存信息,接着列举了常用内存检测工具及优缺点。然后阐述了 OOM 常见问题如 Bitmap 内存占用、内存泄露等,给出优化方式和监控方法。还提到了业务优化,包括设备分级和业务降级,以及线上监控和告警体系搭建。最后总结了内存优化的成果和不足。
  9. 让您的应用为 16 KB 页面大小的设备做好准备 : 为 16 KB 页面大小的设备做好应用准备
  10. Getting Started with CameraX in Jetpack Compose : 本文概述了如何使用 Android 的新 CameraX 和 Jetpack Compose 库在 Compose 中创建摄像头预览。
  11. 鸿蒙应用签名实操及机制探究 : 本文介绍了鸿蒙单框架应用的签名机制,拆解了每一步的实操过程和背后的实现原理,并对源码进行了分析整理签名的校验机制。从中探究了鸿蒙系统的安全设计思路,希望能给从事鸿蒙研发的同学提供一些借鉴。
  12. 译:我是如何利用 LLM 进行编程的 : 本文作者分享了利用大语言模型(LLM)进行编程的个人经验和未来展望。作者主要通过自动补全代码、搜索技术问题、对话式编程三种方式利用 LLM,并认为这些方式都为提高编程工作效率带来积极影响。文章还分析了利用 LLM 编写可读测试、小型化包结构等新的编程趋势,并提出了 sketch.dev 这样专门针对 LLM 编程的 IDE 概念。
  13. 谈功耗是什么 : 这是一篇关于移动设备功耗分析和优化的文章,功耗是硬件器件消耗电池能量的量度。我们需要从软件角度理解和估算功耗,通过分析软件结构和对硬件的使用情况来分解和定位功耗问题。从软件角度看功耗主要包括 CPU 负载、传感器使用、屏幕显示等各个方面。我们需要从进程、线程级别逐步深化到函数、任务级别来分析和定位功耗问题。在任务级别上,Android 应用的功耗主要体现在 Looper 消息处理、Binder 调用、线程回调等关键结构上,可以通过代码标注的方式将其与功耗情况关联起来。
  14. SPE profiling 及其使用 : 本文介绍了 Arm Statical Profiling Extension(SPE),相比传统的性能监测单元(PMU)方式,SPE 可以更精确地采集 CPU pipeline 执行过程中的指令信息,包括指令地址、访问数据地址、延迟时间等关键指标,对于性能分析和优化非常有用。
  15. Android 性能优化之绑定 RenderThread 到大核 CPU : 本文从以下几个方面介绍了如何在 Android 中绑定任意线程到任意 CPU 上:
    1. 介绍了 sched_setaffinity 函数的用法,用于设置线程与 CPU 的亲和性。
    2. 介绍了如何获取手机 CPU 的频率信息,并根据频率将 CPU 划分为大中小三类。
    3. 介绍了 Android 系统中的 RenderThread 线程,以及如何找到并绑定它。
    4. 介绍了如何获取任意线程的 tid (内核线程 ID)。
    5. 给出了绑定线程到 CPU 的代码实现。
    6. 提供了 JNI 接口,供 Java 层调用绑定线程的功能。
  16. 性能周刊 2025-01-04 第 3 期 : 2025 年的第一期性能周刊
  17. TargetSdk 30 升级后的 ARSC 压缩方案探索 : 本文主要介绍快手如何在 TargetSdk 30 上 重新对 resources.arsc 进行压缩,取得巨大包体收益的探索
  18. 我在性能团队的这两年 : 这篇文章主要介绍了一个前端性能团队在实践过程中所遇到的一些问题及解决方案。包括性能指标的定义与细化、线上线下的防劣化机制、性能优化的具体手段等。整体来说,文章涵盖了性能优化的全生命周期,对于想要深入了解性能优化工作的同学来说是非常好的参考。
  19. 一文彻底搞懂 Android 广播的所有知识 (上)–四大组件系统 : 一篇详细介绍 Android 广播机制知识的文章,从广播机制的原理、分类,到广播接收者、广播发送者、广播分发中心的原理和实现,全面系统地阐述了广播机制的各个方面。
  20. 一文彻底搞懂 Android 广播的所有知识 (下)–四大组件系统 : 文章详细介绍了 Android 广播的发送和接收流程,包括广播发送者、广播分发中心及广播接收者之间的交互机制。文章从广播的发送、接收、队列管理等方面全面解析了 Android 广播的运作过程。

非技术文章

  1. 橙子的 2024 年终总结:追寻幸福 : 这篇文章是作者 2024 年的年终总结,概括了他这一年在学习英语、跑步、旅行、人际关系以及工作等方面的思考和实践。作者从寻找幸福和财富的角度出发,探讨了复杂世界中如何平和地对待生活中发生的事情。他在各个领域的经历和感悟为读者提供了有价值的见解和启发。
  2. 控糖革命-为什么吃了红薯之后会犯困 : 这篇文章探讨了控制血糖的重要性,分析了各种食物对血糖的影响机制,并提出了一些有效的血糖管理技巧。作者分享了自己的亲身经历,通过对血糖曲线的持续监测和调整饮食结构,成功地改善了身体状况。文章强调平稳的血糖曲线对于健康的重要性,并提出了三个需要注意的关键点:1.葡萄糖并非唯一影响因素;2.评判食物优劣需考虑替代选择;3.建议都有科学依据支持。
  3. 英语学习过程中的一些思考 : 这是作者关于自己学习英语半年来的一些思考和总结。作者在开始认真学习英语大约半年时间后,取得了一些进步,主要阐述了自己在寻找学习素材、阅读、听力以及背单词等方面的具体做法和一些心得。
  4. vivo X200 Pro 使用体验 : 这是一篇关于作者对 vivo X200 Pro 手机的使用体验的文章。作者从购买选型、实际使用、系统操作、影像系统和电池续航等方面对这款手机进行了全面的评测和点评
  5. 2025 年的一些做与不做 : 这篇文章讲述了作者对生活简单化的追求,并提出了 2025 年的一些”减法”和”加法”的想法,比如减少手机时间、对他人的评价等,增加写作、阅读、运动等方面的时间。作者提倡通过”20+20”原则来选择和保留家中的物品,鼓励断舍离,保留最喜欢的东西。
  6. 对时间管理的一些思考 : Rolen 分享了他关于时间管理和内容输出的经验
  7. 我们在 2024 年从大型语言模型中学到的事 : 这篇文章回顾了 2024 年大型语言模型 (LLM) 领域的重大进展,主要包括:LLM 模型性能的持续提升突破 GPT-4 水平、LLM 效率和价格的大幅提升、多模态 LLM 的崛起、基于提示词的应用生成成为常见功能,以及新兴的”可扩展推理”模型等。同时,文章也提出了一些亟需解决的问题,如 LLM 的使用难度上升、知识分布不均、模型批评等。
  8. 创业日记 独立开发周记 85 :2024 年终总结

工具

  1. 电子书 - 大语言模型 : 该文章概述了大语言模型技术的发展历程及其在学术界和工业界的现状。作者指出,大模型技术的核心原理和关键技术细节往往难以完全解密,这限制了学术界的研究进展。同时,作者也对大模型技术的开放性表示乐观,认为随着更多核心技术的公开和共享,大模型技术的”透明化”将进一步提高。
  2. Windsurf:面向未来的 AI 编程工具详解 : Windsurf 是一款面向未来的 AI 编程工具,它采用先进的上下文感知、多模型 AI、实时协作和高效代码管理功能,为开发者提供全面的编程支持,提升开发效率和代码质量。它通过创新性的 Flows 模式和 Cascade 功能,为 AI 与人类开发者的协作提供了全新的范式,并在团队协作、项目管理等方面表现出色。该工具在分析代码库、检测和修复错误、自然语言编程等方面也有广泛应用,可有效优化开发流程。随着 AI 技术的进步,Windsurf 有望进一步提升其智能化水平,为开发者带来更优质的编程体验。

杂记

关于作者

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

  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
  8. Android 性能优化知识星球 : 个人运营的一个知识星球,欢迎加入,多谢支持~

Android Weekly 2025-01 期

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

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

本期作为 2025 年的第一期,我将为大家呈现去年精心收集的精华内容,涵盖技术与非技术领域,涉及个人开发者、团队建设、公众号运营以及个人博客等多个方面,力求为读者带来更多启发与价值。内容可能有点多,大家可以收藏起来慢慢看。

技术文章

  1. 大型 APP 的性能优化思路:本文主要讲述了大型 APP 的性能优化思路。与中小型 APP 不同,大型 APP 需要有一个专门的团队来从全局的视角进行性能优化,重点包括如何管控业务对资源的使用、如何度量业务对资源的消耗、以及如何让业务在资源紧张时做出更优的策略。文章以速度、流畅性优化和内存优化为例具体阐述了这些思路。

  2. 使用 Perfetto 定位应用启动性能的瓶颈:这篇文章主要介绍了如何使用 Perfetto 工具定位 Android 应用程序启动性能的瓶颈。文章详细讲解了应用启动时间的两个核心指标 TTID 和 TTFD、Perfetto 工具的使用方法,以及通过 Perfetto 分析应用启动过程中可能出现的性能问题,如启动时触发 GC、主线程耗时操作、OpenDexFilesFromOat 耗时过长以及连续多帧绘制超时等。

  3. Android 线程性能优化方法总结: 本文主要总结了 Android 线程性能优化方法,包括进程和线程的概念、常见问题及优化手段。常见问题如进程内存隔离、进程与线程 ID 关系等。优化手段涵盖降低主线程任务量、提高线程执行效率,如避免使用 AQS、减少线程创建、锁消除等,还介绍了非常规优化及其他性能方面的注意事项。

  4. 浏览器内核创新技术演进及实践 - U4 5.0 : 文章介绍了 UC 内核团队研发的最新一代 Web 引擎 U4 5.0,从渲染引擎、JS 引擎、多媒体技术、基础技术等方面,详细阐述了内核引擎技术的演进思路和应用实践。通过一系列技术优化,如直接光栅化、直接合成、InRenderer GPU、Code Cache、JS AOT、U4 Snapshot 等,可以让 Web 应用实现 App 级的优秀性能体验。

  5. Android Kotlin 协程初探 | 京东物流技术团队:该文章是关于 Android Kotlin 协程的介绍,包括协程的概念、与其他编程语言中协程的关系、协程解决的问题,以及协程的工作原理等。

  6. 如何正确地理解应用架构并开发:本文探讨了应用架构的相关概念,包括模块与包的区别、分层架构设计、CQRS 模式、六边形架构和洋葱圈架构等,并针对一些常见的工程实践问题给出了建议和最佳实践。

  7. Evaluating Performance:这个文章思路写的特别好,简单总结了这个文章的思路:Google 看待性能方式,还是非常全面和独到的。性能问题一类是容量问题,一类是噪声问题。容量决定了最大负载,提高系统容量的方法,包括调频 CPU/GPU frequency,CPU cores online,温控测量,组件优化,降负载;jitter 是随机噪音,那些措施可以减少随机噪音,如文件预读,应用反复启动;性能优化测量方法,如 TouchLatency 测试应用,如何在低频设置下,找到 jitter,如 block D 状态位置等

  8. 大公司如何做 APP:背后的开发流程和技术:本文主要讲述了大公司在开发 APP 时常见的研发流程和技术特点。涵盖了产品需求、研发流程、技术实现等多个方面,并对一些常见的技术问题如组件化开发和大前端开发进行了深入分析。

  9. Android 居然还能这样抓捕和利用主线程碎片时间:本文通过分析 Android 应用开发中主线程卡顿问题,提出了利用主线程空闲时间来执行业务逻辑的解决方案。方案包括帧率耗时监控模块、空闲时间切片模块、耗时任务拆分模块和子任务智能调度模块。通过这种方式,可以有效地利用主线程的空闲时间,提高主线程资源的利用率,从而减少主线程的卡顿,给用户带来更好的操作体验。

  10. 西瓜 Android 子进程优化治理实践:该文章描述了西瓜视频客户端团队在针对启动阶段子进程优化治理方面的实践。主要包括 push 进程、小程序进程、downloader 进程、Sandboxed 进程等子进程的优化方案及其实践效果。

  11. WWDC 2021: Avoid hitches and discover the Render Loop:这篇文章概括地介绍了 WWDC 2021 上关于”避免卡顿和探索渲染循环”的三个视频内容

  12. Android 卡顿与 ANR 的分析实践:本文主要介绍了 Android 中卡顿和 ANR 的分析实践,包括产生原理、监控工具 LooperMonitor 的实现和优势,以及通过实际案例分享了利用工具分析和解决问题的过程。

  13. Perfetto 数据流架构故障分析:带你研究 trace 为何丢失:这篇文章介绍了 Perfetto 这个跨平台系统跟踪和分析平台的数据编码与传输(Data Flow)架构设计,并从这个角度解释了数据丢失可能出现的原因,并提出了相应的解决或规避建议。文章还介绍了 Perfetto 的基本架构,包括数据生产者、消费者、以及 IPC 通信的模型。同时还分析了 Perfetto 在平衡观测开销与传输可靠性、数据编码协议等方面的权衡与设计。最后给出了一些如何降低 Perfetto 使用故障的具体建议。

  14. Android 和 iOS 渲染架构差异对比,孰胜孰负?:文章对比了 Android 和 iOS 的渲染架构差异,指出两者上层都非直接通过 CPU 绘制,真正负责绘制的是 Android 的 SurfaceFlinger 和 RenderThread 及 iOS 的 render server。强调 Metal 和 Vulkan 等底层 API 对渲染性能影响更大,还比较了 Metal 和 Vulkan 的特点及使用差异。

  15. Android 中基于 DWARF 的 stack unwind 实现原理:本文介绍了 Android 中基于 DWARF 标准的 stack unwind 实现原理。首先介绍了基于 frame pointer (FP) 的栈回溯方法,并分析了编译器优化对 FP unwind 的影响。随后深入介绍了 DWARF 标准中 .eh_frame 和 .debug_frame 等 section 的作用和内部格式,并举例说明了 readelf 工具如何解析这些信息以实现栈回溯。最后简单介绍了 simpleperf 中如何利用 DWARF 信息进行基于事件的栈回溯。

  16. 指尖上的科技:智能手机触摸屏技术与功耗优化:本文介绍了触摸屏的工作原理,包括触摸屏的分类、工作模式以及关键参数,并分析了常见的触摸屏功耗问题和优化策略。文章重点介绍了电容式触摸屏的工作原理,并阐述了触摸屏的基本工作流程。同时,文章还介绍了不同工作模式下的功耗特点,以及针对常见的功耗问题提出了相应的优化策略。此外,文章还提供了一些功耗调试的方法,帮助用户解决触摸屏功耗相关的问题。

  17. 一颗像素的诞生:该文章主要阐述了浏览器内核如何将网页内容渲染成像素,整个渲染流程包括解析 HTML、处理 CSS 样式、布局排版、绘制、光栅化、合成、上传等步骤。文章详细介绍了每个步骤的工作原理和优化方案。

  18. ART 虚拟机中的栈上替换编译(OSR):本文主要介绍了 Android Runtime (ART) 虚拟机中的栈上替换编译(OSR)技术。ART 虚拟机中有三种编译策略:kBaseline、kOptimized 和 kOSR。当解释执行方法时,如果方法的执行频率过高,就会触发 kBaseline 编译。然而 kBaseline 编译出来的机器码只能从方法入口处开始执行,无法从中间指令处开始执行。为了解决这个问题,ART 引入了 OSR 编译。OSR 编译会在方法的循环回边处构造一个优化后的机器码执行栈,从而实现从中间指令处开始执行。文章详细介绍了 OSR 编译的实现机制,包括栈帧结构、寄存器分配等关键技术。

  19. 全方位剖析内核抢占机制:全方位剖析了 Linux 内核中的抢占机制(preemption),包括其原理、实现细节、对系统性能和用户体验的影响。重点介绍了 Linux 内核中 3 种抢占模型的异同、内核抢占的实现机制、如何通过内核抢占解决优先级反转等问题。并针对具体案例分析了内核中不当使用抢占接口导致的实时性下降问题。

  20. 内核内存稳定性新特性:Page Table Check 机制解读:内核引入了 Page Table Check 机制来检测内存损坏问题。这是为了解决内核中长期存在的一类内存引用计数 bug。

  21. 内核调度客制化利器:SCHED_EXT:本文介绍了 Linux 内核的 SCHED_EXT 可扩展调度器,它提供了一个支持 eBPF 程序修改调度策略的调度类。SCHED_EXT 的目标是让开发者更易于实验和探索新的调度策略,并支持满足特殊应用场景的深度定制化调度。文章详细介绍了 SCHED_EXT 的基本框架、扩展支持接口、核心数据结构和调度逻辑,并以 Central Scheduler 示例说明了 SCHED_EXT 的 bpf 调度器应用。

  22. 抖音 Android 端图片优化实践:本文从抖音 Android 端图片优化历程着笔,主要介绍字节自研 BDFresco 图片框架及其在抖音的最佳实践、经验沉淀、业务价值。通过分享业务视角遇到的一些问题和我们的解决思路,希望能抛砖引玉,为遇到类似困扰的伙伴们提供有价值的参考。

  23. 速度优化:充分利用 CPU 闲置时刻:文章主要介绍了充分利用 CPU 闲置时刻提升效率的优化方案。包括通过 proc 节点文件下的 CPU 数据和 times 函数判断 CPU 是否闲置。proc 文件方案中,介绍了总 CPU 消耗和进程 CPU 消耗的计算方法及相关数据含义,还提到了 CPU 闲置通知的采集时间范围和使用率等。times 函数方案在高频判断场景中性能更好,通过计算 CPU 速率判断闲置,实现更简单。

  24. 淘宝页面首帧优化的经验和心得:本文分享了淘宝移动端页面首帧优化的经验和心得。主要包括以下内容:

    1. 首帧优化的重要性,如建立用户好感度、提升转化率、节省成本等。
    2. 首帧的定义和衡量标准,包括 Loading 图、主体内容呈现、页面可交互等阶段。
    3. 分析和排查性能问题的方法,包括了解现状、原理分析、使用性能分析工具等。
    4. 常见的优化方案和策略,如预加载/缓存、延迟初始化、并行处理、View 渲染优化等。
    5. 线上验收和防劣化机制的重要性。
    6. 持续迭代优化和复杂度管理的建议。
  25. GPU 性能原理拆解:该文章从 GPU 的架构角度分析了常见的一些 GPU 性能优化「迷思」,并提出了正确的分析方法,包括分析 GPU 的隐面剔除策略、顶点着色器执行效率、带宽瓶颈、分支预测等。同时还介绍了移动端 GPU 独有的一些特点,以及验证性能优化效果的一些测量指标。

  26. 抄 Apple Intelligence 作业的思路:文章主要探讨了 Apple Intelligence 相关内容,包括其诞生的技术背景、特点、启示以及对终端模型的预言等。技术背景涉及规模扩展、价格竞争及存在的问题。Apple Intelligence 特点为强大、直观、集成、个人向,有写作工具等功能,存在隐私风波等情况。其启示包括注重产品使用体验和用户情绪价值、面临生态罗生门等。此外还探讨了抄其作业需考虑信息和处理能力来源,以及对终端模型部署的预测。

  27. vivo X200 系列手机做了哪些性能优化:该文主要介绍了 vivo X200 系列手机在性能优化方面做出的努力。主要包括: 采用高通最新的 CPU 芯片,优化缓存结构,调度算法优化,内存管理优化,触控系统优化,以及通信信号优化等方面。文章从多个角度分析了 vivo 在这些方面的创新和改进,为用户带来更出色的手机性能体验。

  28. Android 系统的锁优化:锁 Lock 的使用和优化在并发的软件系统开发中,是个典型的场景,除了可能导致性能开销外,严重的甚至出现影响系统稳定的死锁问题。本文通过 android 系统源码的具体案例,来简单介绍下常见的锁优化,包括:忘加锁,多加锁,加错锁,锁小了,锁大了等情况。大锁转小锁,小锁转无锁等案例。

  29. 启动优化:盘点那些《不常规》的黑科技:该文章介绍了启动时间优化的一些方法,包括梳理冗余逻辑、设计启动框架、线程梳理、优化闪屏页、利用 Baseline Profile 技术,以及一些”非常规”的优化策略,如 Apk 资源重排、主动触发 dex2aot、启动阶段抑制 GC、以及保活策略等。

  30. 各个手机发布会上的游戏帧率能准确对比出谁家的手机性能更流畅么?:文章总结了如何更准确地评估手机游戏的性能指标,不仅仅看平均帧率。文章指出,平均帧率并不能完全反映游戏的流畅性,需要从多个方面了解游戏帧率的性能。

  31. 利用 ADPF 性能提示优化 Android 应用体验: Android Dynamic Performance Framework(ADPF)是 google 推广的一套用于优化散热以及 CPU 性能的动态性能框架。本文主要介绍其中的 performance hint 的部分。

  32. 技术剖析 | Java 内存屏障:从理论到实现:内存屏障(Memory barrier)是一组处理器指令,使 CPU 或编译器对屏障指令前后发出的内存操作强制实施排序约束,通常意味着在屏障之前发出的操作保证在屏障之后发出的操作之前执行。本文将深入探讨 Java 中内存屏障的概念、应用以及在 JVM 中的具体实现,从理论到实现阐述这一主题。

  33. 关于 Android15 GKI2407R40 导致梆梆加固软件崩溃:文章主要讲述了因 Android15 GKI2407R40 导致梆梆加固软件崩溃的问题。大量 App 闪退,经分析是访问无效地址导致段错误。通过多种手段分析,发现根本原因是 7r40 缺少相关补丁,解决办法是回退版本或应用后面正常版本。文中还介绍了问题分析过程和相关调试方法。

  34. Tools, not Rules: become a better Android developer with Compiler Explorer: 这篇文章介绍了 Compiler Explorer 这个工具,它可以帮助开发者深入了解 Android 编译器的工作原理。文章展示了如何使用 Compiler Explorer 分析 Android Java 和 Kotlin 代码的编译输出,并介绍了一些编译优化技术,如返回值合并、常量折叠等。此外,文章还讨论了代码混淆和基线配置文件对编译过程的影响。总的来说,这篇文章鼓励开发者使用工具而不是死记硬背规则来提升代码效率。

  35. 移动平台的 GPU 性能分析:这篇文章介绍了在移动平台上分析 GPU 性能的方法。作者介绍了通常分析移动 GPU 性能的目的、使用的工具以及相关的性能指标,包括实时开销、带宽开销和 Shader Core 性能等方面。文章还讨论了在分析游戏场景数据时需要关注的一些指标。总的来说,这篇文章为移动游序渲染性能分析提供了一个全面的参考。

  36. 结合源码和 Perfetto 分析 Android 渲染机制:这篇文章主要介绍了 Android 渲染机制的原理和流程,结合 Perfetto 工具从多个角度分析 Android 渲染过程,并解答了一些渲染相关的常见问题。

  37. Reddit improved app startup speed by over 50% using Baseline Profiles and R8:Reddit 通过使用 Baseline Profiles 和 R8 编译器优化大幅提高了 Android 应用的启动速度和渲染性能。该应用还采用 Jetpack Compose 重写了旧版 UI,在用户体验和开发体验上都有所改善。

  38. 物格而后知至:WALT 调度器之 RTG:RTG(Related Thread Group)是高通引入的一个特性,目的是将关联的进程加入到同一个 group 组中,用于提升性能。比如显示相关的主线程和 render 线程就可以加入到相同的 RTG 组中,根据实际需求,对其进行一些特殊处理。可以将其调度到同一个 CPU 簇上,使得它们可以共享相同的 cache 资源,减少 cache miss;也可以聚合 RTG 组里的任务负载,提升 CPU 的频率,达到性能提升的目的。RTG 对于选核也会产生一定的影响。除此之外,在 RTG 的基础上引申出来很多其它的特性,如优先调度等。

  39. 不做 Linux 内核代码的复读机:这篇文章讨论了学习 Linux 内核的正确方式。作者认为很多人只是在简单地复读 Linux 内核代码,而没有真正理解其背后的原理和思想。作者提出了七个关于调度器的问题,这些问题都需要内核开发者解决。

  40. 【Android 原生问题分析】夸克、抖音划动无响应问题【Android14】:这篇文章主要分析了 Android14 中夸克、抖音划动无响应的问题。通过多次添加 log 分析,发现问题出在 DisplayManagerService 通知机制上。一个 App 多个进程共享 uid 时,通知记录创建方式有误,导致部分进程无法收到通知。最终 Google patch 解决了此问题,将通知记录由一个 uid 对应一个改为对应一组。

  41. Android 图形架构缺陷:Android 图形架构缺陷分析及优化方案

  42. 芦半山的文章:

    1. 经验 | 向 AOSP 贡献虚拟机的优化:文章主要讲述作者向 ART 主线提交虚拟机优化改动的经历,包括缘起、确定方案、开发各环节(下载代码、配置环境、开发、测试、测算效果、优化代码格式和性能)、提交与回撤,以及针对国内 App 生态的相关影响和后记。整个过程曲折,涉及诸多技术细节和问题解决。
    2. 问题 | Debuggable app 在 Android 14 上运行卡顿:富途开发者反映 debuggable 版本 app 在 Android 14 上卡顿,经探究发现是解释器执行模式改变所致。谷歌改动原因、性能劣化原因被分析,提出修复方案,经性能验证效果明显。此问题国内沟通不畅,作者愿做“传声筒”,还申请公众号同步更新文章。
    3. 【思考】学习源码的三重境界:文章主要讲述学习源码的三重境界。第一重是理解知识细节“知其然”;第二重是跳出细节,从宏观和历史角度思考,理解设计意图“知其所以然”;第三重是在实践中学习,通过主动写代码来深入理解。作者还举例说明了后两重境界,并在后记中强调看源码对自身能力提升有益。
    4. 【Android ART】回退到解释执行:文章介绍了 Android 虚拟机中的 deoptimize 概念,即从 AOT/JIT 回退到解释执行。以数组越界为例说明其作用,能使编译代码更精简优化。还阐述了切换过程的核心工作,如 Shadow Frame 重建、程序流向控制等,非调试原因的 deoptimize 通常只处理最上面一帧。
    5. Java Hook 的实践之路:文章介绍了基于 ART 的 Java Hook 方案,包括原理选择倾向入口替换及解决其问题,确定了 API 设定和依赖库,阐述了实现过程中 Trampoline、Target Method 和 Hook 的设计,还补充了增强兼容性和稳定性的设计细节,最后指出方案仍有缺陷且项目暂无法开源。
    6. 【Android 15】内存分配器 Scudo 在这些年的优化:文章主要介绍了 Android 11 引入的内存分配器 Scudo 面临的困境及优化。困境在于其安全目标拖累性能和内存表现而被冷落。优化包括申请内存时用 Cache 和 TSD 应对问题,释放内存时采取措施缓解归还空闲页的性能损耗,高效使用内存时采用折中方案减少碎片化。最后指出优化思路源于生活。
    7. 【Android ART】Heap 的内存布局:本文基于 Android 15 介绍了 ART 中 Heap 的内存布局。Heap 由众多不同功能的内存组合而成,通过 Space 管理,文中先阐述内存布局。Heap 内存分为 5 种 Space:Image space 加载特定文件,对象不可移动和回收;Zygote space 由 zygote 启动过程中的重要对象构成,不可移动和回收;Non-moving space 对象不可移动但可回收;Large object space 管理特定对象,不可移动但可回收;Main space 是内存分配和回收的主要场所,对象可移动和回收。
    8. Android Native | 信号的底层逻辑:本文基于 Android 15,围绕信号的底层逻辑展开,包括数据访问异常产生信号的过程、信号的形式及发送方式、线程检查处理信号的流程,还详细阐述了从异常状态切换到信号处理结束返回用户态的各阶段,涉及内核、CPU 等知识。
    9. 案例 | 奇怪,为什么 Hook 不生效?:大厂一兄弟在通过代理替换 hook 方法时遇到问题,目标是替换 Choreographer 中 mHandler 字段的两个方法,结果 release 包中一个生效一个不生效。经分析,hook 未生效是因机器码获取 ArtMethod 固定,不受代理对象影响,还探讨了相关优化、生效情况及原因,强调要具体情况具体分析。
    10. 实践 | 解决 GDB 无法调试 Android Coredump 的问题:文章主要讲述用 GDB 调试 Android Coredump 时遇到的问题及解决过程。因 LLDB 功能和可视化体验不足,作者尝试用 GDB 但遇到共享库无法加载的问题。经调试和分析,问题根源是一笔改动导致内存中读取的 program header 异常,修复方案是更正返回逻辑,也提到了之前版本的 workaround 方案。
    11. Android“引用们”的底层原理:这篇文章深入剖析了 Android 中四种引用的底层原理,包括 WeakReference、SoftReference、PhantomReference 和 FinalizerReference。分别阐述了它们的特点、回收机制、处理逻辑等,如 WeakReference 如何欺骗 GC 及 get 方法的处理,SoftReference 的回收时机,PhantomReference 与 ReferenceQueue 的配合,FinalizerReference 与 finalize 方法的关联等,最后作者分享了研究此内容的心得。
    12. 解读 HWASan 日志:这篇文章主要介绍了 HWASan 相关内容,包括从 Android 14 开始其使用变得简单,错误提示类型及原因,如 tag-mismatch、invalid-free 等,还讲解了错误地址、内存块信息、根因判断逻辑、调用栈存储等,最后提到了寄存器记录等,作者虽知受众不多仍精心梳理。
    13. Android | 拨开“类加载”的迷雾:本文主要围绕 Android 中的类加载展开,指出“双亲委派模式”译名易造成误解,阐述类加载的过程,包括查找是否已加载、开辟空间、填充数据、寻找父类和接口、方法和字段链接、完成初始化等步骤,并提及 PreloadClasses 环节作用衰减,被 Boot Images 取代,后者会提前加载和初始化部分类。
    14. 闲谈|关于工作选择这件事:文章围绕工作选择展开,通过回乡见闻及自身经历探讨形势变化下的工作现状。提到女司机兼职、钓鱼人增多、少儿培训招生难等,强调副业重要。还阐述对工作路线选择的思考,认为管理路线需等待机会,技术路线深度和广度最终会汇合,应重视个人时间和价值。
    15. 闲谈丨技术思维的桎梏:这篇文章探讨了技术思维的桎梏,指出程序员偏爱确定性,导致性格保守、遵守规则,丧失机会,还存在自负,互相轻视,造成人际关系紧张和视野局限。作者以自身经历为例进行阐述,最后表示写此文是为思考提纯和方便回顾,若能给他人带来感悟则荣幸。
  43. 赵俊民的文章

    1. 案例分享:NIO channels 导致一个内存泄漏:这是一篇探讨 NIO channels 内存泄漏问题的技术文章。作者分析了 SystemServer 进程中某个线程持有未释放的内存区域的原因,并找到了导致问题的关键代码位置。针对这个问题,作者与开发人员讨论并提出了具体的修复方案。
    2. 案例分享:一个奇怪 StackOverflowError 问题:这篇文章讨论了一个奇怪的 StackOverflow 异常问题的分析和解决方案。
    3. 技术管理思考:关于软件工程团队问题改进 1. 技术管理思考:关于软件工程团队问题改进 2
    4. 技术管理思考:关于软件工程团队问题改进 3
    5. 一个踩内存问题的折腾
    6. 谈软件质量管理
    7. 架构设计基本素养
    8. Google 在 LLM 时代下软件工程
  44. SimplePerf 系列

    1. Simpleperf 理论与实践指南(前言篇) - 知乎
    2. Simplepref 操作实践篇 - 知乎
    3. 火焰图(Flame Graph) - 知乎
    4. Simpleperf 理论篇(七)- 查看结果 - 知乎
    5. Simpleperf 理论篇(六)- 脚本参考 - 知乎
    6. Simpleperf 理论篇(五)- 可执行命令 - 知乎
    7. Simpleperf 理论篇(四)- Android 平台分析 - 知乎
    8. Simpleperf 翻译篇 3-Android 应用分析 - 知乎
    9. Simpleperf 翻译篇 2-幻灯片 - 知乎
    10. Simpleperf 翻译篇 1-概述 - 知乎
    11. 如何从 Wall/CPU time 理解多线程程序的并行效率 - 知乎
  45. 小二哥的文章

    1. [085]SW VSYNC 模型更新与校准
    2. [086]VSYNC 研究-最后的窗户纸
    3. [089]图解 Binder 应用篇-补课篇
    4. [090]unsignaled-buffer-latch 功能
    5. [093]SurfaceSyncer 的致命缺陷
    6. [095]Binder 调用的优先级降级
    7. [096]图解 HWC 的合成策略
    8. [097]SurfaceSyncGroup 的细节
    9. [098]vnd binder 和 binder 的共存问题

非技术文章

  1. 程序员海外工作 — 语言篇:本文主要讲述了作者在提高英语听力、口语、阅读和写作方面的一些经验。
  2. So Long, and Thanks for All the Bytes:Chet Haase 撰写的告别文章。他在谷歌 Android 团队工作了近 14 年,是该领域的资深人士。然而,他决定离开科技行业,重新投身于自己热爱的喜剧剧本创作。他打算前往芝加哥攻读喜剧编剧专业的硕士学位,开启人生的新征程。
  3. 中外程序员差异:这篇文章对比了中外程序员的一些差异,总结了几个方面的差异,包括:关键要点、细节把握程度、文字表达能力、个人职业目标、业余时间安排
  4. 程序员如何提升个人技术影响力|得物技术:本文探讨了程序员如何提升个人技术影响力的方法和实践。从输入知识、输出项目贡献、写技术文章、做行业演讲、出书等方面提供了详细的建议和步骤。文章强调了持续学习和输出的重要性,力求帮助技术同学建立自己的影响力。
  5. 降本增效的本到底是什么?:最近几年所有公司都在强调降本增效,降本增效的措施从裁员,优化再到 AI, 方法五花八门,但回归到问题本质,我们付出的最高成本真的是在人力,设备,推广这些显性的投入上吗?不是的,我认为恰恰相反,成本最高的是我们的决策,特别是管理者的决策,决策失误带来的成本才是最高的,而且这个问题也最难解决。观察了那么多优秀团队,自己也带团队多年,一个 NB 的团队一定会有一个特征:有着极高的决策效率,决策效率则包括两个方面,决策速度和决策成功率。
  6. 我们如何学习?:该文章探讨了如何融合引导式学习和沉浸式学习的方法,以提高学习效果。作者认为,通过利用人工智能技术,可以在实际项目中为学习者提供个性化的指导和支持,帮助他们全身心投入并将所学知识牢固掌握。同时,作者还讨论了记忆系统和练习方法,以及聊天机器人导师的局限性。
  7. 读书笔记-超越百岁:这篇文章主要概括了《超越百岁》一书的核心内容,介绍了长寿的科学原理和实践方法。文章从医学发展的 3.0 时代说起,指出现有医疗模式对抗”四大骑士”(心脏病、癌症、2 型糖尿病、阿兹海默症)的方法存在问题,并提出了新的健康管理理念。文章重点阐述了影响健康和寿命的 5 个关键因素:运动、营养、睡眠、情绪和药物,从中筛选出最关键的锻炼和饮食两个杠杆。同时还总结了百岁老人和长寿基因的研究进展。
  8. 第一性原理思考:解决问题的通用框架:这篇文章介绍了一个基于第一性原理的通用问题解决框架,主要包括 4 个步骤:信息收集、信息建模、信息判断和策略迭代。文章以减肥和提高 iOS 开发水平作为具体案例,详细阐述了每个步骤的具体操作。最后,文章也指出了该框架的三个局限性。
  9. 第一性原理思考:解决问题的通用框架(续):这篇文章介绍了一种解决问题的通用框架,重点讨论了信息判断这一核心步骤。作者列举了几种有用的信息判断方法,如 28 原理、谬误推导、终局思维等,同时也分析了一些常见的信息判断误区,如把相关性当因果、从众心理、现状即是真理和情绪等。
  10. 聊聊未来技术趋势:本文提供了一篇关于未来技术趋势的分享内容。作者从 AI、投资、下一代技术等方面,结合市场报告和资料,分享了一些自己的理解和见解。文章涉及了 SpaceX 火箭回收、OneKey 硬件钱包、区块链和智能合约等主题。
  11. AI 和写作:写作 AI 和辅助创作的思考
  12. 十年学会编程:该文提出了学习编程的一些建议,提倡用十年时间来深入学习编程,而不是仅仅通过几天或几小时的速成课程学习。作者认为,要成为一名优秀的程序员需要长期的实践和经验积累。
  13. OpenAI o1 模型的前世今生: OpenAI 发布的 o1 模型在推理能力上取得了巨大进步,在 STEM 领域的表现远超 GPT-4 等前代模型。o1 的关键在于在预训练和训练后两个阶段采用了创新性的方法,如使用大量包含推理过程数据进行预训练、引入强化学习和自举生成思维链等。o1 的出现标志着大语言模型进入”后训练”时代,未来可能引发模型性能大幅提升,同时也带来了一些安全隐患需要关注。
  14. Follow —— 信息获取的另一种形态:Follow 是一款新型的信息获取和浏览工具,它改变了普通用户获取信息的方式。它通过对 RSS 信息呈现方式的优化、与 RSSHub 的深度集成以及自定义信息源的功能,为用户打造了一个个性化的 “数字花园”,提升了信息获取的效率和体验。
  15. 【0101】技术的定位:程序员是这个时代的手艺人:这篇文章探讨了程序员的职业定位,分析了技术红利的发展趋势,指出了程序员应该如何管理自己的心态、专注于技术能力的提升来迎接未来的挑战。
  16. 全网最深度解读:自研 CPU,如何成为高通骁龙的最后一块拼图?:聊聊高通自研 CPU 背后的本质逻辑和深度技术梳理
  17. AI 时代的独立开发之路:本文介绍了作者从文学转向编程,并分享了他开发的两个 AI 应用程序的成功经验。作者从不会编程到自己开发应用,探索了在 AI 时代独立开发的可能性。文中主要讨论了作者开发 AI 美食推荐应用和陌生人闹钟的过程和思考。
  18. 程序员焦虑症之「没用过」和「不知道」,码农的「拧螺丝」之道:这篇文章探讨了程序员常见的焦虑症状——“没用过”和”不知道”新技术的焦虑。作者认为这源自于我们只是在被动”拧螺丝”而非主动理解技术本质。他建议,我们应该尊重自己的能力,不要被框架和工具的更新所束缚,而要去理解它们的原理和工作机制,从而真正提升技术和解决能力。
  19. 编程十年的感悟:这篇文章是作者分享了自己 10 年来从事编程工作的感悟。主要包括:持续学习新技术、重视英语能力提高、培养独立思考能力、关注产品搭建而非过于追求代码优化、选择合适的工具技术而非追求最新流行、重视与优秀同事的交流学习、保重身体健康等方面。作者认为编程的核心竞争力在于解决问题的能力,而非局限于某一种具体技术。
  20. 我在性能团队的这两年:作者从 2 年前加入飞书文档性能团队开始介绍了性能指标的定义、细化、优化过程以及防劣化机制的各个环节。包括线下通过自动化脚本检测劣化、线上通过大盘数据监控、针对性能劣化进行追踪和复现等方面的经验。最后还分享了团队在滚动防劣化、块加载优化、内存优化等具体场景下的实践。
  21. 有序退网:该文章作者分享了他渐进退网的决定和过程。作者认为互联网和社交媒体已经变得过于”上瘾”,并对个人生活和工作产生了负面影响。通过阅读相关心理学书籍以及亲身体验”闭关”的积极效果,作者决定开始有意识地控制自己的网络使用时间,将精力集中于工作、健身、学习、开源项目等其他更有价值的方面。

个人博客内容更新

  1. Android Perfetto 系列目录
  2. Android Perfetto 系列 1:Perfetto 工具简介
  3. Android Perfetto 系列 2:Perfetto Trace 抓取
  4. Android Perfetto 系列 3:熟悉 Perfetto View
  5. 2023 年的方方面面
  6. Android App ANR 系列 2 :ANR 分析套路和关键 Log 介绍
  7. Android App ANR 系列 3 :ANR 案例分享

Android 开发者们的动态

我使用 Follow 创建了一个 Android 开发者们动态的 List,目前免费,欢迎使用 Follow App 作为知识输入源的各位订阅。

关于 Follow App 的介绍可以看这篇文章:Follow —— 信息获取的另一种形态:Follow 是一款新型的信息获取和浏览工具,它改变了普通用户获取信息的方式。它通过对 RSS 信息呈现方式的优化、与 RSSHub 的深度集成以及自定义信息源的功能,为用户打造了一个个性化的 “数字花园”,提升了信息获取的效率和体验。

目前 Follow 已经取代了我的大部分内容获取软件,新闻、动态、独立博客更新、视频、音频、包括社交网络都可以订阅。

打鸡血

掌握学习艺术:记忆与知识保持的终极指南!

这幅图展示了如何有效记忆和保留知识的策略,助你成为学习高手:

  1. 费曼技巧:

    • 选择主题:深入理解一个主题。
    • 简单解释:用简单的语言或对孩子解释。
    • 识别知识空白:找出并填补理解中的漏洞。
    • 精炼解释:提高解释的清晰度和准确性。
    • 自我测试:通过测试进一步简化解释。
  2. 莱特纳系统:

    • 通过逐步减少复习频率,将难题转化为易题。
    • 每周三次复习难题、两次中等题、一次易题。
  3. 主动回忆:

    • 主动提取信息,加强神经连接,而非被动吸收。
  4. 六大记忆保持技巧:

    • 多样化资源:使用视频、书籍和便利贴等多种学习材料。
    • 建立联系:用类比将新信息与熟悉概念关联,便于理解和记忆。
    • 深入理解:关注背后的原因,加深理解,使信息更有意义。
    • 关注健康:优先保证睡眠、营养和锻炼,维持大脑健康。
    • 间隔学习:分散学习时间,避免认知过载。
    • 信息分块:将复杂信息分解成小块,逐步学习以防止压倒性负担。

关于作者

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

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