做了这么久性能相关的工作,也接触了不少模块,说实话要做好性能这一块,真心不容易.为什么这么说? 是因为需要接触的知识实在是太多了, Android 是一个整体,牵一发而动全身,不是说只懂一个模块就可以做好.
在学习的过程中,除了看源码,我还接触到了很多互联网上已有的知识,各位前辈们,将他们的知识和经验倾囊相授,让我少走了很多弯路. 我在自己的笔记里面存了很多很优秀的技术文章和技术文档,现在我决定将这些放到网上,让每一个想进入 Android 系统开发和优化这个领域的人,能通过阅读这篇文章,快速入门. 同时也算是我对知识的一个梳理,查漏补缺,终身学习.
这篇文章记录了 Android 性能优化所必须掌握的知识,涵盖性能优化相关的方方面面(当然如果读者同学你也有很棒的私藏文章,也可以加入到这篇文章里面).部分文章可能需要特殊的技巧才能看到,希望你已经掌握了这一部分技巧。
优化心得和经验
- 系列视频 Android Performance Patterns
- 给 App 提速:Android 性能优化总结
- 移动端性能监控方案 Hertz
- Android 性能优化后续
- Android性能优化之虚拟机调优
- Android UI 性能优化
- Performance Tips
- 美团外卖Android Lint代码检查实践
- Android battery and memory optimizations - Google I/O 2016
- Google 免费的公开课 : Android Performance
- Android APP 性能优化的一些思考
- 使用Android Studio和MAT进行内存泄漏分析
响应速度
流畅度
- Evaluating Performance
- Understanding Systrace
- Using ftrace
- Identifying Capacity-Related Jank
- Identifying Jitter-Related Jank
- 那些年我们用过的显示性能指标
- Slow rendering
- Android 流畅度检测原理简析
内存
- Low RAM Configuration
- Linux Swap 与 Zram 详解
- Android 加载不同 DPI 资源与内存消耗间的关系
- ZRAM SWAP 内存管理讲解
- Android OOM 案例分析
- Android 代码内存优化建议-Android 资源篇
- Android 代码内存优化建议-Android 官方篇
- Android 代码内存优化建议-Java 官方篇
- Android 内存优化之一:MAT 使用入门
- Android 内存优化之二:MAT 使用进阶
- Android 内存优化之三:打开 MAT 中的 Bitmap 原图
- Android 代码内存优化建议-OnTrimMemory 优化
- Android LowMemoryKiller原理分析
- Android 匿名共享内存(Ashmem)原理
- 郝健: Linux内存管理学习笔记-第1节课
- 郝健: Linux内存管理学习笔记-第2节课
- 郝健: Linux内存管理学习笔记-第3节课
- 郝健: Linux内存管理学习笔记-第4节课
- 郝健: Linux内存管理学习笔记-第5节课
- 郝健: Linux内存管理学习笔记-第6节课
- Manage your app’s memory
- Overview of memory management
- Linux 查看进程消耗内存情况总结
- 一次过程Android平台native heap内存泄露的追查过程
图形栈
- Android 硬件加速原理与实现简介
- Android6.0 显示系统(一) Surface 创建
- Android6.0 显示系统(二) SurfaceFlinger 创建 Surface
- Android6.0 显示系统(三) 管理图像缓冲区
- Android6.0 显示系统(五) SurfaceFlinger 服务
- Android6.0 显示系统(六) 图像的输出过程
- Android6.0 SurfaceControl 分析(一)SurfaceControl创建&使用 Surface创建&使用
- Android6.0 SurfaceControl 分析(二)SurfaceControl和SurfaceFlinger通信)
- Android6.0 VSync 信号如何到用户进程
- Android 图形系统概述
- Choreographer 原理
- SurfaceFlinger 启动篇
- SurfaceFlinger 绘图篇
- Android 应用程序 UI 硬件加速渲染技术简要介绍和学习计划
- Android 应用程序 UI 硬件加速渲染环境初始化过程分析
- Android 应用程序 UI 硬件加速渲染的预加载资源地图集服务(Asset Atlas Service)分析
- Android 应用程序 UI 硬件加速渲染的 Display List 构建过程分析
- Android 应用程序 UI 硬件加速渲染的 Display List 渲染过程分析
- Android 应用程序 UI 硬件加速渲染的动画执行过程分析
- Android硬件加速(一)- 理解Android硬件加速原理的小白文
- Android硬件加速(二)- RenderThread与OpenGL GPU渲染
虚拟机
- ART and Dalvik
- Android 8.0 ART Improvements
- Dalvik bytecode
- Dalvik Executable format
- Dalvik Executable instruction formats
- Constraints
- Configuring ART
- Debugging ART Garbage Collection
- Implementing ART Just-In-Time (JIT) Compiler
- 深入学习Android:虚拟机&运行时
- Android性能优化之虚拟机调优
系统框架
- Task Snapshots
- Android Input 子系统:Input 进程的创建,监听线程的启动
- Android Input 子系统:Input 事件的产生、读取和分发,InputReader、InputDispatcher
- EventHub 与设备、Input 事件的交互
- Android 消息机制,从Java 层到 Native 层剖析
- 理解 Android Binder 机制(1/3):驱动篇
- 理解 Android Binder 机制(2/3):C++ 层
- 理解 Android Binder 机制(3/3):Java 层
- Android Bander 设计与实现 - 设计篇
- 四大组件之综述
- 四大组件之 ActivityRecord
- 四大组件之 ContentProviderRecord
- 四大组件之 BroadcastRecord
- 四大组件之 ServiceRecord
- 简述 Activity 与 Window 关系
- 理解 Android Context
- 理解 Application 创建过程
- 以 Window 视角来看 startActivity
- WMS—启动窗口(StartingWindow)
- WMS—启动过程
- 写给 Android 应用工程师的 Binder 原理剖析
- Binder系列—开篇
- Binder系列1—Binder Driver初探
- Binder系列2—Binder Driver再探
- Binder系列3—启动ServiceManager
- Binder系列4—获取ServiceManager
- Binder系列5—注册服务(addService)
- Binder系列6—获取服务(getService)
- Binder系列7—framework层分析
- Binder系列8—如何使用Binder
- Binder系列9—如何使用AIDL
- Binder系列10—总结
- 彻底理解Android Binder通信架构
- Android Bander设计与实现 - 设计篇
进程管理
- cpuset
- cgroup
- Android 进程调度之 adj 算法
- Linux 进程管理(一)
- Linux 进程管理(二)–fork
- Linux 进程 pid 分配法
- 收费培训视频 打通 Linux 脉络系列:进程、线程和调度
- Android 系统中的进程管理:进程的创建
- Android 系统中的进程管理:进程的优先级
- Android 系统中的进程管理:内存的回收
- Android 系统启动:init 进程与 init 语言
- Android 进程保活招式大全
- 进程和线程
- 通过线程提升性能
- 解读Android进程优先级ADJ算法
调试工具
- 另一个 Android 性能剖析工具——simpleperf
- 如何调试 Android Framework
- 如何调试 Android Native Framework
- Catapult 项目
- 手把手教你使用Systrace(一)
- 手把手教你使用Systrace(二)——锁优化
- 使用Android Studio和MAT进行内存泄漏分析
硬件相关
编程语言
Linux
- 内核探索:Regmap 框架:简化慢速 I/O 接口优化性能
- 嵌入式 Linux 启动时间优化
- Linux文件系统预读的情景分析
- 使用blktrace统计磁盘块I/O访问频率
- Linux系统调用(syscall)原理
- 浅墨: 聊聊Linux IO(上)
- 浅墨: 聊聊Linux IO(中)——Linux内核中的IO栈
- 浅墨: 聊聊Linux IO(下)
- 郭健: deadline调度器之(一):原理
- 郭健: Deadline调度器之(二):细节和使用方法
- 郭健: Linux内存模型——平坦、非连续与稀疏
- linux内核分析——CFS(完全公平调度算法)
- 从几个问题开始理解CFS调度器
我辈楷模
面试题
- Android 2018 最新面试题
- 如何衡量一个Android应用开发人员的能力
- 2018Android面试总结
- Android2017-2018最新面试题(3-5年经验个人面试经历)
- Android 开发工程师面试指南
- 阿里电话面试面试题总结,附答案!
- 阿里巴巴面试题
- 美团面试题
- 豌豆荚三面试题
- 蜻蜓FM面试题
- 新浪微博面试题
- 网易杭研面试题
- 为什么想来我们公司工作?- 面试常见问题解析
- 今日头条大佬十年面试了 2000 人,总结了这 5 点
</article>
原文作者:Gracker
原文链接:http://androidperformance.com/2018/05/07/Android-performance-optimization-skills-and-tools/