Android 性能優化必知必會(2020-5-16)

做了這么久性能相關的工作,也接觸了不少模塊,說實話要做好性能這一塊,真心不容易.為什么這么說? 是因為需要接觸的知識實在是太多了, Android 是一個整體,牽一發而動全身,不是說只懂一個模塊就可以做好

在學習的過程中,除了看源碼,我還接觸到了很多互聯網上已有的知識,各位前輩們,將他們的知識和經驗傾囊相授,讓我少走了很多彎路. 我在自己的筆記里面存了很多很優秀的技術文章和技術文檔,現在我決定將這些放到網上,讓每一個想進入 Android 系統開發和優化這個領域的人,能通過閱讀這篇文章,快速入門. 同時也算是我對知識的一個梳理,查漏補缺,終身學習

這篇文章記錄了 Android 性能優化所必須掌握的知識,涵蓋性能優化相關的方方面面(當然如果讀者同學你也有很棒的私藏文章,也可以加入到這篇文章里面).部分文章可能需要特殊的技巧才能看到,希望你已經掌握了這一部分技巧。另外附送Android 開發者學習路線(2020 版本)

這篇文章會持續更新,最新更新時間:2020-04-27. 更多 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進行內存泄漏分析
  13. 歷時1年,上百萬行代碼!首次揭秘手淘全鏈路性能優化(上)
  14. 別催更啦!手淘全鏈路性能優化下篇
  15. Android開發高手課
  16. 手Q Android緩存監控與優化實踐
  17. 微信讀書(Android)閱讀引擎卡頓監控測試
  18. Data science for mobile OS system optimization
  19. Matrix TraceCanary -- 初戀·卡頓
  20. Matrix IOCanary -- I/O 質量監控
  21. 見微知著,Google Photos Web UI 完善之旅
  22. 微信 Android 終端內存優化實踐
  23. 支付寶客戶端架構解析:Android 客戶端啟動速度優化之「垃圾回收」
  24. 抖音BoostMultiDex優化實踐:Android低版本上APP首次啟動時間減少80%
  25. 抖音包大小優化-資源優化
  26. 性能問題終結者”Olympic
  27. 美團Java線程池實現原理及其在美團業務中的實踐
  28. Probe:Android線上OOM問題定位組件

響應速度

  1. Android App 啟動優化全記錄
  2. Optimizing Boot Times
  3. Android 中如何計算 App 的啟動時間
  4. Google 官方文檔 - Launch-time performance
  5. 都9102年了,Android 冷啟動優化除了老三樣還有哪些新招?
  6. 支付寶 App 構建優化解析:通過安裝包重排布優化 Android 端啟動性能
  7. Redex 初探與 Interdex:Andorid 冷啟動優化
  8. Android性能優化筆記(一)——啟動優化
  9. 抖音研發實踐:基于二進制文件重排的解決方案 APP啟動速度提升超15%
  10. 愛奇藝Android客戶端啟動優化與分析
  11. 深入探索Android啟動速度優化

流暢度

  1. Android 中的卡頓丟幀原因概述 - 方法論
  2. Android 中的卡頓丟幀原因概述 - 系統篇
  3. Android 中的卡頓丟幀原因概述 - 應用篇
  4. Android 平臺應用寶和訊飛輸入法無障礙服務導致的全局卡頓分析
  5. Evaluating Performance
  6. Understanding Systrace
  7. Using ftrace
  8. Identifying Capacity-Related Jank
  9. Identifying Jitter-Related Jank
  10. 那些年我們用過的顯示性能指標
  11. Slow rendering
  12. Android 流暢度檢測原理簡析
  13. Android JankTracker 原理解析
  14. Android 界面性能調優手冊
  15. App流暢度優化:利用字節碼插樁實現一個快速排查高耗時方法的工具

內存

  1. Android 中低內存對性能的影響
  2. Low RAM Configuration
  3. Linux Swap 與 Zram 詳解
  4. Android 加載不同 DPI 資源與內存消耗間的關系
  5. ZRAM SWAP 內存管理講解
  6. Android OOM 案例分析
  7. Android 代碼內存優化建議-Android 資源篇
  8. Android 代碼內存優化建議-Android 官方篇
  9. Android 代碼內存優化建議-Java 官方篇
  10. Android 內存優化之一:MAT 使用入門
  11. Android 內存優化之二:MAT 使用進階
  12. Android 內存優化之三:打開 MAT 中的 Bitmap 原圖
  13. Android 代碼內存優化建議-OnTrimMemory 優化
  14. Android LowMemoryKiller原理分析
  15. Android 匿名共享內存(Ashmem)原理
  16. 郝健: Linux內存管理學習筆記-第1節課
  17. 郝健: Linux內存管理學習筆記-第2節課
  18. 郝健: Linux內存管理學習筆記-第3節課
  19. 郝健: Linux內存管理學習筆記-第4節課
  20. 郝健: Linux內存管理學習筆記-第5節課
  21. 郝健: Linux內存管理學習筆記-第6節課
  22. Manage your app's memory
  23. Overview of memory management
  24. Linux 查看進程消耗內存情況總結
  25. 一次過程Android平臺native heap內存泄露的追查過程
  26. 淺談Cache Memory
  27. Bitmap優化詳談
  28. 探索 Android 內存優化方法
  29. 看完這篇文章,解決 APP 中 90 % 的內存異常問題
  30. 實踐App內存優化:如何有序地做內存分析與優化
  31. 談談內存壓縮那些事
  32. dumpsys meminfo 的原理和應用

圖形棧

  1. Android display pipeline本身以及進程調度
  2. Android 中的 Hardware Layer 詳解
  3. Android 硬件加速原理與實現簡介
  4. Android 圖形系統概述
  5. Choreographer 原理
  6. SurfaceFlinger 啟動篇
  7. SurfaceFlinger 繪圖篇
  8. Android 應用程序 UI 硬件加速渲染技術簡要介紹和學習計劃
  9. Android 應用程序 UI 硬件加速渲染環境初始化過程分析
  10. Android 應用程序 UI 硬件加速渲染的預加載資源地圖集服務(Asset Atlas Service)分析
  11. Android 應用程序 UI 硬件加速渲染的 Display List 構建過程分析
  12. Android 應用程序 UI 硬件加速渲染的 Display List 渲染過程分析
  13. Android 應用程序 UI 硬件加速渲染的動畫執行過程分析
  14. Android硬件加速(一)- 理解Android硬件加速原理的小白文
  15. Android硬件加速(二)- RenderThread與OpenGL GPU渲染
  16. Android中的GraphicBuffer同步機制-Fence
  17. Android P 圖形顯示系統(一)硬件合成HWC2
  18. Android P 圖像顯示系統(二)GraphicBuffer和Gralloc分析
  19. Android P 圖像顯示系統(三)Android HWUI 繪制流程
  20. Android P 圖形顯示系統(四) Android VirtualDisplay解析
  21. Android P 圖形顯示系統(五) 上層Client和SurfaceFlinger的交互
  22. Android P 圖形顯示系統(六) SurfaceFlinger合成流程(一)
  23. Android P 圖形顯示系統(七) SurfaceFlinger合成流程(二)
  24. Android P 圖形顯示系統(八) SurfaceFlinger合成流程(三)
  25. Android P 圖形顯示系統(九) Android圖形顯示子系統概述
  26. Android P 圖形顯示系統(十) BufferQueue(一)
  27. Android P 圖形顯示系統(十一) BufferQueue(二)
  28. Android P 圖形顯示系統(十二) BufferQueue(三)
  29. 渲染流水線中的光柵化1
  30. 渲染流水線中的光柵化2

虛擬機

  1. 帶你了解 Android 10 中的 art
  2. 帶你了解 Android 10 中的 art
  3. 帶你了解 Android 10 中的 art
  4. 帶你了解 Android 10 中的 art
  5. 帶你了解 Android 10 中的 art
  6. ART and Dalvik
  7. Android 8.0 ART Improvements
  8. Dalvik bytecode
  9. Dalvik Executable format
  10. Dalvik Executable instruction formats
  11. Constraints
  12. Configuring ART
  13. Debugging ART Garbage Collection
  14. Implementing ART Just-In-Time (JIT) Compiler
  15. 深入學習Android:虛擬機&運行時
  16. Android性能優化之虛擬機調優
  17. Android上的Dalvik虛擬機
  18. Android上的ART虛擬機
  19. Android ART 并行拷貝垃圾回收
  20. Android ART dex2oat 淺析

系統框架

  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 原理剖析
  22. Binder系列—開篇
  23. Binder系列1—Binder Driver初探
  24. Binder系列2—Binder Driver再探
  25. Binder系列3—啟動ServiceManager
  26. Binder系列4—獲取ServiceManager
  27. Binder系列5—注冊服務(addService)
  28. Binder系列6—獲取服務(getService)
  29. Binder系列7—framework層分析
  30. Binder系列8—如何使用Binder
  31. Binder系列9—如何使用AIDL
  32. Binder系列10—總結
  33. 徹底理解Android Binder通信架構
  34. Android Bander設計與實現 - 設計篇
  35. Binder學習指南
  36. 你知道android的MessageQueue.IdleHandler嗎?
  37. 聊一聊Android的消息機制
  38. 聊聊 APK (一) ——直接運行 Dex文件的黑魔法
  39. 聊聊 APK(二)——Dex 熱修復與 Classpath
  40. 聊聊 APK(三)—— Android 資源編譯的秘密
  41. 盧半山 - 反思|Android 事件攔截機制的設計與實現
  42. 盧半山 - Binder 內存拷貝的本質和變遷
  43. 盧半山 - AIDL 中 inout 的本質
  44. 盧半山 - Binder 的異常機制
  45. 盧半山 - Binder 世界中的代理機制(上)
  46. 盧半山 - Binder 概述
  47. Android 系統架構 —— Choreographer 的工作機制
  48. Looper的wake機制升級
  49. Android10.0 Binder通信原理(一)Binder、HwBinder、VndBinder概要
  50. Android10.0 Binder通信原理(二)-Binder入門篇
  51. Android10.0 Binder通信原理(三)-ServiceManager篇
  52. Android10.0 Binder通信原理(四)-Native-C\C++實例分析
  53. Android10.0 Binder通信原理(五)-Binder驅動分析
  54. Android10.0 Binder通信原理(六)-Binder數據如何完成定向打擊
  55. Android10.0 Binder通信原理(七)-Framework binder示例
  56. Android10.0 Binder通信原理(八)-Framework層分析
  57. Android10.0 Binder通信原理(九)-AIDL Binder示例
  58. Android10.0 Binder通信原理(十)-AIDL原理分析-Proxy-Stub設計模式

穩定性

  1. 徹底理解安卓應用無響應機制
  2. 應用與系統穩定性第一篇---ANR問題分析的一般套路
  3. 應用與系統穩定性第二篇---ANR的監測與信息采集
  4. 應用與系統穩定性第三篇---FD泄露問題漫談
  5. 應用與系統穩定性第四篇---單線程導致的空指針問題分析
  6. 應用與系統穩定性第五篇---Watchdog原理和問題分析
  7. 應用與系統穩定性第六篇---JVM垃圾回收之finalize執行時引起timed out 閃退分析
  8. 應用與系統穩定性第七篇--- 用Asan 提前解決NDK疑難crash

功耗

  1. 能感知功耗的Linux調度器(EAS)
  2. Android 功耗改進

進程管理

  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系統上的進程管理:進程的調度
  12. Android 系統啟動:init 進程與 init 語言
  13. Android 進程保活招式大全
  14. 進程和線程
  15. 通過線程提升性能
  16. 解讀Android進程優先級ADJ算法
  17. 雜談Android線程優先級

IO

  1. Android 性能優化 —— IO 的監控與優化
  2. 從內核文件系統看文件讀寫過程
  3. 認真分析mmap:是什么 為什么 怎么用

調試工具

  1. 另一個 Android 性能剖析工具——simpleperf
  2. Simpleperf
  3. 如何調試 Android Framework
  4. 如何調試 Android Native Framework
  5. Catapult 項目
  6. 手把手教你使用Systrace(一)
  7. 手把手教你使用Systrace(二)——鎖優化
  8. 使用Android Studio和MAT進行內存泄漏分析
  9. Systrace 簡介
  10. Systrace 基礎知識 - Systrace 預備知識
  11. Systrace 基礎知識 - Why 60 fps ?
  12. Systrace 基礎知識 - SystemServer 解讀
  13. Systrace 基礎知識 - Input 解讀
  14. Systrace 基礎知識 - Vsync 產生與工作機制解讀
  15. Systrace 基礎知識 - Vsync-App :基于 Choreographer 的渲染機制詳解
  16. Systrace 基礎知識 - MainThread 和 RenderThread 解讀
  17. Systrace 基礎知識 - Binder 和鎖競爭解讀
  18. Systrace 基礎知識 - Triple Buffer 解讀
  19. Systrace 基礎知識 - CPU Info 解讀
  20. Tracing Window Transitions
  21. Android性能問題分析之bugreport
  22. 騰訊 Apm 框架 Matrix 源碼閱讀 - gradle插件
  23. 騰訊 Apm 框架 Matrix 源碼閱讀 - TracePlugin 架構解析
  24. 騰訊 Apm 框架 Matrix 源碼閱讀 - TracePlugin 之 AnrTracer
  25. 騰訊 Apm 框架 Matrix 源碼閱讀 - TracePlugin 之 StartupTracer
  26. 騰訊 Apm 框架 Matrix 源碼閱讀 - TracePlugin 之 FrameTracer
  27. 騰訊 Apm 框架 Matrix 源碼閱讀 - 架構解析

硬件相關

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

編程語言

  1. 探索 Java 隱藏的開銷
  2. Kotlin 中文文檔
  3. Java多態在android中的實現
  4. Cancellation and Exceptions in Coroutines
    1. Coroutines: First things first
    2. Cancellation in coroutines
    3. Exceptions in Coroutines
    4. Coroutines & Patterns for work that shouldn’t be cancelled
  5. 徹底理解引用在 Android 和 Java 中的工作原理

Linux

  1. 內核探索:Regmap 框架:簡化慢速 I/O 接口優化性能
  2. 嵌入式 Linux 啟動時間優化
  3. Linux文件系統預讀的情景分析
  4. 使用blktrace統計磁盤塊I/O訪問頻率
  5. Linux系統調用(syscall)原理
  6. 淺墨: 聊聊Linux IO(上)
  7. 淺墨: 聊聊Linux IO(中)——Linux內核中的IO棧
  8. 淺墨: 聊聊Linux IO(下)
  9. 郭健: deadline調度器之(一):原理
  10. 郭健: Deadline調度器之(二):細節和使用方法
  11. 郭健: Linux內存模型——平坦、非連續與稀疏
  12. linux內核分析——CFS(完全公平調度算法)
  13. 從幾個問題開始理解CFS調度器
  14. CFS調度器(1)-基本原理
  15. CFS調度器(2)-源碼解析
  16. CFS調度器(3)-組調度
  17. CFS調度器(4)-PELT(per entity load tracking)
  18. CFS調度器(5)-帶寬控制
  19. CFS調度器(6)-總結
  20. 關于線程和I/O模型的極簡知識
  21. TRIM:提升磁盤性能,緩解Android卡頓
  22. LWN 456904: 避免磁盤回寫(writeback),抑制(throttling)緩存(page cache)寫入
  23. LWN 384093: 有關 “回寫”(writeback)的問題討論
  24. LWN 211505: 避免和解決內存碎片化
  25. SMP Primer for Android
  26. 內存分配1 - 空閑鏈表和內存池
  27. 內存分配2 - Buddy系統的原理
  28. 內存分配3 - Linux中Buddy系統的實現
  29. Linux中的內存壓縮
  30. 研究Linux內核的樂趣
  31. linux IO Block layer 解析
  32. CFS任務的負載均衡(框架篇)
  33. 一張圖讀懂內存反碎片化
  34. 淺談新型非易失存儲
  35. Linux devfreq framework 剖析
  36. 內存泄漏(增長)火焰圖
  37. Linux 系統性能評測基準系統配置及其原理
  38. Cgroups 與 Systemd

Flutter

  1. 深入 Flutter 的高性能圖形渲染
  2. 跨平臺技術演進及Flutter未來
  3. 跨平臺技術趨勢及字節跳動 Flutter 架構實踐
  4. Flutter 的性能測試和理論
  5. 深入理解 Flutter 多線程
  6. 深入理解Flutter引擎啟動
  7. Flutter渲染機制—UI線程
  8. Flutter渲染機制—GPU線程

Fuchsia

  1. 許中興博士演講:Fuchsia OS 簡介

技術之外的思考

  1. 我到底有多么努力
  2. 工作以來的一些感悟
  3. 如何自學Android?
  4. 技術人最重要的能力是什么?
  5. 淺談軟件工程師的代碼素養
  6. 陸奇:除了好代碼,工程師怎樣才算優秀?
  7. 別讓自己“墻”了自己
  8. 100% 成功率的 offer 收割機是怎樣練成的?
  9. 使用簡單的邏輯方法進行獨立思考

面試題

  1. Android 2018 最新面試題
  2. 如何衡量一個Android應用開發人員的能力
  3. 2018Android面試總結
  4. Android2017-2018最新面試題(3-5年經驗個人面試經歷)
  5. Android 開發工程師面試指南
  6. 阿里電話面試面試題總結,附答案!
  7. 阿里巴巴面試題
  8. 美團面試題
  9. 豌豆莢三面試題
  10. 蜻蜓FM面試題
  11. 新浪微博面試題
  12. 網易杭研面試題
  13. 為什么想來我們公司工作?- 面試常見問題解析
  14. 今日頭條大佬十年面試了 2000 人,總結了這 5 點
  15. 2019 年美團點評高級 Android 開發寒冬跳槽漲薪經驗掏心分享
  16. 如何回答性能優化的問題,才能打動阿里面試官?
  17. 2019.07 Android 面試真題集錦
  18. 技術面試中面試官怎么考察候選人?
  19. 給扔物線 HenCoder Plus 學員的一次分享文字版
  20. 快手,字節跳動,百度,美團Offer之旅
  21. 美帝面試二三事

本文其他地址

由于博客留言交流不方便,點贊或者交流,可以移步本文的知乎或者掘金頁面
知乎 - Android 性能優化必知必會

關于我 && 博客

  1. 關于我 , 非常希望和大家一起交流 , 共同進步 .
  2. 博客內容導航
  3. 優秀博客文章記錄 - Android 性能優化必知必會

一個人可以走的更快 , 一群人可以走的更遠

更多內容可以進入 Android Performance 查看

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。