Android 性能优化必知必会

  1. 优化心得和经验
  2. 响应速度
  3. 流畅度
  4. 内存
  5. 图形栈
  6. 虚拟机
  7. 系统框架
  8. 进程管理
  9. 调试工具
  10. 硬件相关
  11. 编程语言
  12. Kernel
  13. 我辈楷模
  14. 面试题

做了这么久性能相关的工作,也接触了不少模块,说实话要做好性能这一块,真心不容易.为什么这么说? 是因为需要接触的知识实在是太多了, Android 是一个整体,牵一发而动全身,不是说只懂一个模块就可以做好.

在学习的过程中,除了看源码,我还接触到了很多互联网上已有的知识,各位前辈们,将他们的知识和经验倾囊相授,让我少走了很多弯路. 我在自己的笔记里面存了很多很优秀的技术文章和技术文档,现在我决定将这些放到网上,让每一个想进入 Android 系统开发和优化这个领域的人,能通过阅读这篇文章,快速入门. 同时也算是我对知识的一个梳理,查漏补缺,终身学习.

这篇文章记录了 Android 性能优化所必须掌握的知识,涵盖性能优化相关的方方面面(当然如果读者同学你也有很棒的私藏文章,也可以加入到这篇文章里面).部分文章可能需要特殊的技巧才能看到,希望你已经掌握了这一部分技巧。

优化心得和经验

  1. 系列视频 Android Performance Patterns
  2. 给 App 提速:Android 性能优化总结
  3. 移动端性能监控方案 Hertz
  4. Android 性能优化后续
  5. Android性能优化之虚拟机调优
  6. Android UI 性能优化
  7. Performance Tips
  8. 美团外卖Android Lint代码检查实践
  9. Android battery and memory optimizations - Google I/O 2016
  10. Google 免费的公开课 : Android Performance
  11. Android APP 性能优化的一些思考
  12. 使用Android Studio和MAT进行内存泄漏分析

响应速度

  1. Optimizing Boot Times
  2. Android 中如何计算 App 的启动时间
  3. Google 官方文档 - Launch-time performance

流畅度

  1. Evaluating Performance
  2. Understanding Systrace
  3. Using ftrace
  4. Identifying Capacity-Related Jank
  5. Identifying Jitter-Related Jank
  6. 那些年我们用过的显示性能指标
  7. Slow rendering
  8. Android 流畅度检测原理简析

内存

  1. Low RAM Configuration
  2. Linux Swap 与 Zram 详解
  3. Android 加载不同 DPI 资源与内存消耗间的关系
  4. ZRAM SWAP 内存管理讲解
  5. Android OOM 案例分析
  6. Android 代码内存优化建议-Android 资源篇
  7. Android 代码内存优化建议-Android 官方篇
  8. Android 代码内存优化建议-Java 官方篇
  9. Android 内存优化之一:MAT 使用入门
  10. Android 内存优化之二:MAT 使用进阶
  11. Android 内存优化之三:打开 MAT 中的 Bitmap 原图
  12. Android 代码内存优化建议-OnTrimMemory 优化
  13. Android LowMemoryKiller原理分析
  14. Android 匿名共享内存(Ashmem)原理
  15. 郝健: Linux内存管理学习笔记-第1节课
  16. 郝健: Linux内存管理学习笔记-第2节课
  17. 郝健: Linux内存管理学习笔记-第3节课
  18. 郝健: Linux内存管理学习笔记-第4节课
  19. 郝健: Linux内存管理学习笔记-第5节课
  20. 郝健: Linux内存管理学习笔记-第6节课
  21. Manage your app’s memory
  22. Overview of memory management

图形栈

  1. Android 硬件加速原理与实现简介
  2. Android6.0 显示系统(一) Surface 创建
  3. Android6.0 显示系统(二) SurfaceFlinger 创建 Surface
  4. Android6.0 显示系统(三) 管理图像缓冲区
  5. Android6.0 显示系统(五) SurfaceFlinger 服务
  6. Android6.0 显示系统(六) 图像的输出过程
  7. Android6.0 SurfaceControl 分析(一)SurfaceControl创建&使用 Surface创建&使用
  8. Android6.0 SurfaceControl 分析(二)SurfaceControl和SurfaceFlinger通信)
  9. Android6.0 VSync 信号如何到用户进程
  10. Android 图形系统概述
  11. Choreographer 原理
  12. SurfaceFlinger 启动篇
  13. SurfaceFlinger 绘图篇
  14. Android 应用程序 UI 硬件加速渲染技术简要介绍和学习计划
  15. Android 应用程序 UI 硬件加速渲染环境初始化过程分析
  16. Android 应用程序 UI 硬件加速渲染的预加载资源地图集服务(Asset Atlas Service)分析
  17. Android 应用程序 UI 硬件加速渲染的 Display List 构建过程分析
  18. Android 应用程序 UI 硬件加速渲染的 Display List 渲染过程分析
  19. Android 应用程序 UI 硬件加速渲染的动画执行过程分析

虚拟机

  1. ART and Dalvik
  2. Android 8.0 ART Improvements
  3. Dalvik bytecode
  4. Dalvik Executable format
  5. Dalvik Executable instruction formats
  6. Constraints
  7. Configuring ART
  8. Debugging ART Garbage Collection
  9. Implementing ART Just-In-Time (JIT) Compiler
  10. 深入学习Android:虚拟机&运行时
  11. Android性能优化之虚拟机调优

系统框架

  1. Task Snapshots
  2. Android Input 子系统:Input 进程的创建,监听线程的启动
  3. Android Input 子系统:Input 事件的产生、读取和分发,InputReader、InputDispatcher
  4. EventHub 与设备、Input 事件的交互
  5. Android 消息机制,从Java 层到 Native 层剖析
  6. 理解 Android Binder 机制(1/3):驱动篇
  7. 理解 Android Binder 机制(2/3):C++ 层
  8. 理解 Android Binder 机制(3/3):Java 层
  9. Android Bander 设计与实现 - 设计篇
  10. 四大组件之综述
  11. 四大组件之 ActivityRecord
  12. 四大组件之 ContentProviderRecord
  13. 四大组件之 BroadcastRecord
  14. 四大组件之 ServiceRecord
  15. 简述 Activity 与 Window 关系
  16. 理解 Android Context
  17. 理解 Application 创建过程
  18. 以 Window 视角来看 startActivity
  19. WMS—启动窗口(StartingWindow)
  20. WMS—启动过程
  21. 写给 Android 应用工程师的 Binder 原理剖析

进程管理

  1. cpuset
  2. cgroup
  3. Android 进程调度之 adj 算法
  4. Linux 进程管理(一)
  5. Linux 进程管理(二)–fork
  6. Linux 进程 pid 分配法
  7. 收费培训视频 打通 Linux 脉络系列:进程、线程和调度
  8. Android 系统中的进程管理:进程的创建
  9. Android 系统中的进程管理:进程的优先级
  10. Android 系统中的进程管理:内存的回收
  11. Android 系统启动:init 进程与 init 语言
  12. Android 进程保活招式大全
  13. 进程和线程
  14. 通过线程提升性能

调试工具

  1. 另一个 Android 性能剖析工具——simpleperf
  2. 如何调试 Android Framework
  3. 如何调试 Android Native Framework
  4. Catapult 项目
  5. 手把手教你使用Systrace(一)
  6. 手把手教你使用Systrace(二)——锁优化
  7. 使用Android Studio和MAT进行内存泄漏分析

硬件相关

  1. Flash Wear Management in Android Automotive
  2. Cortex-A75 和 Cortex-A55
  3. CPU Utilization is Wrong

编程语言

  1. 探索 Java 隐藏的开销
  2. Kotlin 中文文档

Kernel

  1. 内核探索:Regmap 框架:简化慢速 I/O 接口优化性能
  2. 嵌入式 Linux 启动时间优化
  3. Linux文件系统预读的情景分析
  4. 使用blktrace统计磁盘块I/O访问频率

我辈楷模

  1. 我到底有多么努力
  2. 工作以来的一些感悟
  3. 如何自学Android?
  4. 技术人最重要的能力是什么?

面试题

  1. Android 2018 最新面试题
  2. 如何衡量一个Android应用开发人员的能力
script>