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

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

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

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

這篇文章會持續(xù)更新,最新更新時間:2020-04-27. 更多 Android 相關(guān)知識文章可以去個人博客

優(yōu)化心得和經(jīng)驗

  1. 系列視頻 Android Performance Patterns
  2. 給 App 提速:Android 性能優(yōu)化總結(jié)
  3. 移動端性能監(jiān)控方案 Hertz
  4. Android 性能優(yōu)化后續(xù)
  5. Android性能優(yōu)化之虛擬機調(diào)優(yōu)
  6. Android UI 性能優(yōu)化
  7. Performance Tips
  8. 美團外賣Android Lint代碼檢查實踐
  9. Android battery and memory optimizations - Google I/O 2016
  10. Google 免費的公開課 : Android Performance
  11. Android APP 性能優(yōu)化的一些思考
  12. 使用Android Studio和MAT進行內(nèi)存泄漏分析
  13. 歷時1年,上百萬行代碼!首次揭秘手淘全鏈路性能優(yōu)化(上)
  14. 別催更啦!手淘全鏈路性能優(yōu)化下篇
  15. Android開發(fā)高手課
  16. 手Q Android緩存監(jiān)控與優(yōu)化實踐
  17. 微信讀書(Android)閱讀引擎卡頓監(jiān)控測試
  18. Data science for mobile OS system optimization
  19. Matrix TraceCanary -- 初戀·卡頓
  20. Matrix IOCanary -- I/O 質(zhì)量監(jiān)控
  21. 見微知著,Google Photos Web UI 完善之旅
  22. 微信 Android 終端內(nèi)存優(yōu)化實踐
  23. 支付寶客戶端架構(gòu)解析:Android 客戶端啟動速度優(yōu)化之「垃圾回收」
  24. 抖音BoostMultiDex優(yōu)化實踐:Android低版本上APP首次啟動時間減少80%
  25. 抖音包大小優(yōu)化-資源優(yōu)化
  26. 性能問題終結(jié)者”O(jiān)lympic
  27. 美團Java線程池實現(xiàn)原理及其在美團業(yè)務中的實踐
  28. Probe:Android線上OOM問題定位組件

響應速度

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

流暢度

  1. Android 中的卡頓丟幀原因概述 - 方法論
  2. Android 中的卡頓丟幀原因概述 - 系統(tǒng)篇
  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 界面性能調(diào)優(yōu)手冊
  15. App流暢度優(yōu)化:利用字節(jié)碼插樁實現(xiàn)一個快速排查高耗時方法的工具

內(nèi)存

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

圖形棧

  1. Android display pipeline本身以及進程調(diào)度
  2. Android 中的 Hardware Layer 詳解
  3. Android 硬件加速原理與實現(xiàn)簡介
  4. Android 圖形系統(tǒng)概述
  5. Choreographer 原理
  6. SurfaceFlinger 啟動篇
  7. SurfaceFlinger 繪圖篇
  8. Android 應用程序 UI 硬件加速渲染技術(shù)簡要介紹和學習計劃
  9. Android 應用程序 UI 硬件加速渲染環(huán)境初始化過程分析
  10. Android 應用程序 UI 硬件加速渲染的預加載資源地圖集服務(Asset Atlas Service)分析
  11. Android 應用程序 UI 硬件加速渲染的 Display List 構(gòu)建過程分析
  12. Android 應用程序 UI 硬件加速渲染的 Display List 渲染過程分析
  13. Android 應用程序 UI 硬件加速渲染的動畫執(zhí)行過程分析
  14. Android硬件加速(一)- 理解Android硬件加速原理的小白文
  15. Android硬件加速(二)- RenderThread與OpenGL GPU渲染
  16. Android中的GraphicBuffer同步機制-Fence
  17. Android P 圖形顯示系統(tǒng)(一)硬件合成HWC2
  18. Android P 圖像顯示系統(tǒng)(二)GraphicBuffer和Gralloc分析
  19. Android P 圖像顯示系統(tǒng)(三)Android HWUI 繪制流程
  20. Android P 圖形顯示系統(tǒng)(四) Android VirtualDisplay解析
  21. Android P 圖形顯示系統(tǒng)(五) 上層Client和SurfaceFlinger的交互
  22. Android P 圖形顯示系統(tǒng)(六) SurfaceFlinger合成流程(一)
  23. Android P 圖形顯示系統(tǒng)(七) SurfaceFlinger合成流程(二)
  24. Android P 圖形顯示系統(tǒng)(八) SurfaceFlinger合成流程(三)
  25. Android P 圖形顯示系統(tǒng)(九) Android圖形顯示子系統(tǒng)概述
  26. Android P 圖形顯示系統(tǒng)(十) BufferQueue(一)
  27. Android P 圖形顯示系統(tǒng)(十一) BufferQueue(二)
  28. Android P 圖形顯示系統(tǒng)(十二) 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性能優(yōu)化之虛擬機調(diào)優(yōu)
  17. Android上的Dalvik虛擬機
  18. Android上的ART虛擬機
  19. Android ART 并行拷貝垃圾回收
  20. Android ART dex2oat 淺析

系統(tǒng)框架

  1. Task Snapshots
  2. Android Input 子系統(tǒng):Input 進程的創(chuàng)建,監(jiān)聽線程的啟動
  3. Android Input 子系統(tǒng):Input 事件的產(chǎn)生、讀取和分發(fā),InputReader、InputDispatcher
  4. EventHub 與設備、Input 事件的交互
  5. Android 消息機制,從Java 層到 Native 層剖析
  6. 理解 Android Binder 機制(1/3):驅(qū)動篇
  7. 理解 Android Binder 機制(2/3):C++ 層
  8. 理解 Android Binder 機制(3/3):Java 層
  9. Android Bander 設計與實現(xiàn) - 設計篇
  10. 四大組件之綜述
  11. 四大組件之 ActivityRecord
  12. 四大組件之 ContentProviderRecord
  13. 四大組件之 BroadcastRecord
  14. 四大組件之 ServiceRecord
  15. 簡述 Activity 與 Window 關(guān)系
  16. 理解 Android Context
  17. 理解 Application 創(chuàng)建過程
  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—總結(jié)
  33. 徹底理解Android Binder通信架構(gòu)
  34. Android Bander設計與實現(xiàn) - 設計篇
  35. Binder學習指南
  36. 你知道android的MessageQueue.IdleHandler嗎?
  37. 聊一聊Android的消息機制
  38. 聊聊 APK (一) ——直接運行 Dex文件的黑魔法
  39. 聊聊 APK(二)——Dex 熱修復與 Classpath
  40. 聊聊 APK(三)—— Android 資源編譯的秘密
  41. 盧半山 - 反思|Android 事件攔截機制的設計與實現(xiàn)
  42. 盧半山 - Binder 內(nèi)存拷貝的本質(zhì)和變遷
  43. 盧半山 - AIDL 中 inout 的本質(zhì)
  44. 盧半山 - Binder 的異常機制
  45. 盧半山 - Binder 世界中的代理機制(上)
  46. 盧半山 - Binder 概述
  47. Android 系統(tǒng)架構(gòu) —— 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驅(qū)動分析
  54. Android10.0 Binder通信原理(六)-Binder數(shù)據(jù)如何完成定向打擊
  55. Android10.0 Binder通信原理(七)-Framework binder示例
  56. Android10.0 Binder通信原理(八)-Framework層分析
  57. Android10.0 Binder通信原理(九)-AIDL Binder示例
  58. Android10.0 Binder通信原理(十)-AIDL原理分析-Proxy-Stub設計模式

穩(wěn)定性

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

功耗

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

進程管理

  1. cpuset
  2. cgroup
  3. Android 進程調(diào)度之 adj 算法
  4. Linux 進程管理(一)
  5. Linux 進程管理(二)--fork
  6. Linux 進程 pid 分配法
  7. 收費培訓視頻 打通 Linux 脈絡系列:進程、線程和調(diào)度
  8. Android 系統(tǒng)中的進程管理:進程的創(chuàng)建
  9. Android 系統(tǒng)中的進程管理:進程的優(yōu)先級
  10. Android 系統(tǒng)中的進程管理:內(nèi)存的回收
  11. Android系統(tǒng)上的進程管理:進程的調(diào)度
  12. Android 系統(tǒng)啟動:init 進程與 init 語言
  13. Android 進程保活招式大全
  14. 進程和線程
  15. 通過線程提升性能
  16. 解讀Android進程優(yōu)先級ADJ算法
  17. 雜談Android線程優(yōu)先級

IO

  1. Android 性能優(yōu)化 —— IO 的監(jiān)控與優(yōu)化
  2. 從內(nèi)核文件系統(tǒng)看文件讀寫過程
  3. 認真分析mmap:是什么 為什么 怎么用

調(diào)試工具

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

硬件相關(guān)

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

編程語言

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

Flutter

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

Fuchsia

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

技術(shù)之外的思考

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

面試題

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

本文其他地址

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

關(guān)于我 && 博客

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

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

更多內(nèi)容可以進入 Android Performance 查看

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容