做了這么久性能相關(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)驗
- 系列視頻 Android Performance Patterns
- 給 App 提速:Android 性能優(yōu)化總結(jié)
- 移動端性能監(jiān)控方案 Hertz
- Android 性能優(yōu)化后續(xù)
- Android性能優(yōu)化之虛擬機調(diào)優(yōu)
- Android UI 性能優(yōu)化
- Performance Tips
- 美團外賣Android Lint代碼檢查實踐
- Android battery and memory optimizations - Google I/O 2016
- Google 免費的公開課 : Android Performance
- Android APP 性能優(yōu)化的一些思考
- 使用Android Studio和MAT進行內(nèi)存泄漏分析
- 歷時1年,上百萬行代碼!首次揭秘手淘全鏈路性能優(yōu)化(上)
- 別催更啦!手淘全鏈路性能優(yōu)化下篇
- Android開發(fā)高手課
- 手Q Android緩存監(jiān)控與優(yōu)化實踐
- 微信讀書(Android)閱讀引擎卡頓監(jiān)控測試
- Data science for mobile OS system optimization
- Matrix TraceCanary -- 初戀·卡頓
- Matrix IOCanary -- I/O 質(zhì)量監(jiān)控
- 見微知著,Google Photos Web UI 完善之旅
- 微信 Android 終端內(nèi)存優(yōu)化實踐
- 支付寶客戶端架構(gòu)解析:Android 客戶端啟動速度優(yōu)化之「垃圾回收」
- 抖音BoostMultiDex優(yōu)化實踐:Android低版本上APP首次啟動時間減少80%
- 抖音包大小優(yōu)化-資源優(yōu)化
- 性能問題終結(jié)者”O(jiān)lympic
- 美團Java線程池實現(xiàn)原理及其在美團業(yè)務中的實踐
- Probe:Android線上OOM問題定位組件
響應速度
- Android App 啟動優(yōu)化全記錄
- Optimizing Boot Times
- Android 中如何計算 App 的啟動時間
- Google 官方文檔 - Launch-time performance
- 都9102年了,Android 冷啟動優(yōu)化除了老三樣還有哪些新招?
- 支付寶 App 構(gòu)建優(yōu)化解析:通過安裝包重排布優(yōu)化 Android 端啟動性能
- Redex 初探與 Interdex:Andorid 冷啟動優(yōu)化
- Android性能優(yōu)化筆記(一)——啟動優(yōu)化
- 抖音研發(fā)實踐:基于二進制文件重排的解決方案 APP啟動速度提升超15%
- 愛奇藝Android客戶端啟動優(yōu)化與分析
- 深入探索Android啟動速度優(yōu)化
流暢度
- Android 中的卡頓丟幀原因概述 - 方法論
- Android 中的卡頓丟幀原因概述 - 系統(tǒng)篇
- Android 中的卡頓丟幀原因概述 - 應用篇
- Android 平臺應用寶和訊飛輸入法無障礙服務導致的全局卡頓分析
- Evaluating Performance
- Understanding Systrace
- Using ftrace
- Identifying Capacity-Related Jank
- Identifying Jitter-Related Jank
- 那些年我們用過的顯示性能指標
- Slow rendering
- Android 流暢度檢測原理簡析
- Android JankTracker 原理解析
- Android 界面性能調(diào)優(yōu)手冊
- App流暢度優(yōu)化:利用字節(jié)碼插樁實現(xiàn)一個快速排查高耗時方法的工具
內(nèi)存
- Android 中低內(nèi)存對性能的影響
- Low RAM Configuration
- Linux Swap 與 Zram 詳解
- Android 加載不同 DPI 資源與內(nèi)存消耗間的關(guān)系
- ZRAM SWAP 內(nèi)存管理講解
- Android OOM 案例分析
- Android 代碼內(nèi)存優(yōu)化建議-Android 資源篇
- Android 代碼內(nèi)存優(yōu)化建議-Android 官方篇
- Android 代碼內(nèi)存優(yōu)化建議-Java 官方篇
- Android 內(nèi)存優(yōu)化之一:MAT 使用入門
- Android 內(nèi)存優(yōu)化之二:MAT 使用進階
- Android 內(nèi)存優(yōu)化之三:打開 MAT 中的 Bitmap 原圖
- Android 代碼內(nèi)存優(yōu)化建議-OnTrimMemory 優(yōu)化
- Android LowMemoryKiller原理分析
- Android 匿名共享內(nèi)存(Ashmem)原理
- 郝健: Linux內(nèi)存管理學習筆記-第1節(jié)課
- 郝健: Linux內(nèi)存管理學習筆記-第2節(jié)課
- 郝健: Linux內(nèi)存管理學習筆記-第3節(jié)課
- 郝健: Linux內(nèi)存管理學習筆記-第4節(jié)課
- 郝健: Linux內(nèi)存管理學習筆記-第5節(jié)課
- 郝健: Linux內(nèi)存管理學習筆記-第6節(jié)課
- Manage your app's memory
- Overview of memory management
- Linux 查看進程消耗內(nèi)存情況總結(jié)
- 一次過程Android平臺native heap內(nèi)存泄露的追查過程
- 淺談Cache Memory
- Bitmap優(yōu)化詳談
- 探索 Android 內(nèi)存優(yōu)化方法
- 看完這篇文章,解決 APP 中 90 % 的內(nèi)存異常問題
- 實踐App內(nèi)存優(yōu)化:如何有序地做內(nèi)存分析與優(yōu)化
- 談談內(nèi)存壓縮那些事
- dumpsys meminfo 的原理和應用
圖形棧
- Android display pipeline本身以及進程調(diào)度
- Android 中的 Hardware Layer 詳解
- Android 硬件加速原理與實現(xiàn)簡介
- Android 圖形系統(tǒng)概述
- Choreographer 原理
- SurfaceFlinger 啟動篇
- SurfaceFlinger 繪圖篇
- Android 應用程序 UI 硬件加速渲染技術(shù)簡要介紹和學習計劃
- Android 應用程序 UI 硬件加速渲染環(huán)境初始化過程分析
- Android 應用程序 UI 硬件加速渲染的預加載資源地圖集服務(Asset Atlas Service)分析
- Android 應用程序 UI 硬件加速渲染的 Display List 構(gòu)建過程分析
- Android 應用程序 UI 硬件加速渲染的 Display List 渲染過程分析
- Android 應用程序 UI 硬件加速渲染的動畫執(zhí)行過程分析
- Android硬件加速(一)- 理解Android硬件加速原理的小白文
- Android硬件加速(二)- RenderThread與OpenGL GPU渲染
- Android中的GraphicBuffer同步機制-Fence
- Android P 圖形顯示系統(tǒng)(一)硬件合成HWC2
- Android P 圖像顯示系統(tǒng)(二)GraphicBuffer和Gralloc分析
- Android P 圖像顯示系統(tǒng)(三)Android HWUI 繪制流程
- Android P 圖形顯示系統(tǒng)(四) Android VirtualDisplay解析
- Android P 圖形顯示系統(tǒng)(五) 上層Client和SurfaceFlinger的交互
- Android P 圖形顯示系統(tǒng)(六) SurfaceFlinger合成流程(一)
- Android P 圖形顯示系統(tǒng)(七) SurfaceFlinger合成流程(二)
- Android P 圖形顯示系統(tǒng)(八) SurfaceFlinger合成流程(三)
- Android P 圖形顯示系統(tǒng)(九) Android圖形顯示子系統(tǒng)概述
- Android P 圖形顯示系統(tǒng)(十) BufferQueue(一)
- Android P 圖形顯示系統(tǒng)(十一) BufferQueue(二)
- Android P 圖形顯示系統(tǒng)(十二) BufferQueue(三)
- 渲染流水線中的光柵化1
- 渲染流水線中的光柵化2
虛擬機
- 帶你了解 Android 10 中的 art
- 帶你了解 Android 10 中的 art
- 帶你了解 Android 10 中的 art
- 帶你了解 Android 10 中的 art
- 帶你了解 Android 10 中的 art
- 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性能優(yōu)化之虛擬機調(diào)優(yōu)
- Android上的Dalvik虛擬機
- Android上的ART虛擬機
- Android ART 并行拷貝垃圾回收
- Android ART dex2oat 淺析
系統(tǒng)框架
- Task Snapshots
- Android Input 子系統(tǒng):Input 進程的創(chuàng)建,監(jiān)聽線程的啟動
- Android Input 子系統(tǒng):Input 事件的產(chǎn)生、讀取和分發(fā),InputReader、InputDispatcher
- EventHub 與設備、Input 事件的交互
- Android 消息機制,從Java 層到 Native 層剖析
- 理解 Android Binder 機制(1/3):驅(qū)動篇
- 理解 Android Binder 機制(2/3):C++ 層
- 理解 Android Binder 機制(3/3):Java 層
- Android Bander 設計與實現(xiàn) - 設計篇
- 四大組件之綜述
- 四大組件之 ActivityRecord
- 四大組件之 ContentProviderRecord
- 四大組件之 BroadcastRecord
- 四大組件之 ServiceRecord
- 簡述 Activity 與 Window 關(guān)系
- 理解 Android Context
- 理解 Application 創(chuàng)建過程
- 以 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—總結(jié)
- 徹底理解Android Binder通信架構(gòu)
- Android Bander設計與實現(xiàn) - 設計篇
- Binder學習指南
- 你知道android的MessageQueue.IdleHandler嗎?
- 聊一聊Android的消息機制
- 聊聊 APK (一) ——直接運行 Dex文件的黑魔法
- 聊聊 APK(二)——Dex 熱修復與 Classpath
- 聊聊 APK(三)—— Android 資源編譯的秘密
- 盧半山 - 反思|Android 事件攔截機制的設計與實現(xiàn)
- 盧半山 - Binder 內(nèi)存拷貝的本質(zhì)和變遷
- 盧半山 - AIDL 中 inout 的本質(zhì)
- 盧半山 - Binder 的異常機制
- 盧半山 - Binder 世界中的代理機制(上)
- 盧半山 - Binder 概述
- Android 系統(tǒng)架構(gòu) —— Choreographer 的工作機制
- Looper的wake機制升級
- Android10.0 Binder通信原理(一)Binder、HwBinder、VndBinder概要
- Android10.0 Binder通信原理(二)-Binder入門篇
- Android10.0 Binder通信原理(三)-ServiceManager篇
- Android10.0 Binder通信原理(四)-Native-C\C++實例分析
- Android10.0 Binder通信原理(五)-Binder驅(qū)動分析
- Android10.0 Binder通信原理(六)-Binder數(shù)據(jù)如何完成定向打擊
- Android10.0 Binder通信原理(七)-Framework binder示例
- Android10.0 Binder通信原理(八)-Framework層分析
- Android10.0 Binder通信原理(九)-AIDL Binder示例
- Android10.0 Binder通信原理(十)-AIDL原理分析-Proxy-Stub設計模式
穩(wěn)定性
- 徹底理解安卓應用無響應機制
- 應用與系統(tǒng)穩(wěn)定性第一篇---ANR問題分析的一般套路
- 應用與系統(tǒng)穩(wěn)定性第二篇---ANR的監(jiān)測與信息采集
- 應用與系統(tǒng)穩(wěn)定性第三篇---FD泄露問題漫談
- 應用與系統(tǒng)穩(wěn)定性第四篇---單線程導致的空指針問題分析
- 應用與系統(tǒng)穩(wěn)定性第五篇---Watchdog原理和問題分析
- 應用與系統(tǒng)穩(wěn)定性第六篇---JVM垃圾回收之finalize執(zhí)行時引起timed out 閃退分析
- 應用與系統(tǒng)穩(wěn)定性第七篇--- 用Asan 提前解決NDK疑難crash
功耗
進程管理
- cpuset
- cgroup
- Android 進程調(diào)度之 adj 算法
- Linux 進程管理(一)
- Linux 進程管理(二)--fork
- Linux 進程 pid 分配法
- 收費培訓視頻 打通 Linux 脈絡系列:進程、線程和調(diào)度
- Android 系統(tǒng)中的進程管理:進程的創(chuàng)建
- Android 系統(tǒng)中的進程管理:進程的優(yōu)先級
- Android 系統(tǒng)中的進程管理:內(nèi)存的回收
- Android系統(tǒng)上的進程管理:進程的調(diào)度
- Android 系統(tǒng)啟動:init 進程與 init 語言
- Android 進程保活招式大全
- 進程和線程
- 通過線程提升性能
- 解讀Android進程優(yōu)先級ADJ算法
- 雜談Android線程優(yōu)先級
IO
調(diào)試工具
- 另一個 Android 性能剖析工具——simpleperf
- Simpleperf
- 如何調(diào)試 Android Framework
- 如何調(diào)試 Android Native Framework
- Catapult 項目
- 手把手教你使用Systrace(一)
- 手把手教你使用Systrace(二)——鎖優(yōu)化
- 使用Android Studio和MAT進行內(nèi)存泄漏分析
- Systrace 簡介
- Systrace 基礎(chǔ)知識 - Systrace 預備知識
- Systrace 基礎(chǔ)知識 - Why 60 fps ?
- Systrace 基礎(chǔ)知識 - SystemServer 解讀
- Systrace 基礎(chǔ)知識 - Input 解讀
- Systrace 基礎(chǔ)知識 - Vsync 產(chǎn)生與工作機制解讀
- Systrace 基礎(chǔ)知識 - Vsync-App :基于 Choreographer 的渲染機制詳解
- Systrace 基礎(chǔ)知識 - MainThread 和 RenderThread 解讀
- Systrace 基礎(chǔ)知識 - Binder 和鎖競爭解讀
- Systrace 基礎(chǔ)知識 - Triple Buffer 解讀
- Systrace 基礎(chǔ)知識 - CPU Info 解讀
- Tracing Window Transitions
- Android性能問題分析之bugreport
- 騰訊 Apm 框架 Matrix 源碼閱讀 - gradle插件
- 騰訊 Apm 框架 Matrix 源碼閱讀 - TracePlugin 架構(gòu)解析
- 騰訊 Apm 框架 Matrix 源碼閱讀 - TracePlugin 之 AnrTracer
- 騰訊 Apm 框架 Matrix 源碼閱讀 - TracePlugin 之 StartupTracer
- 騰訊 Apm 框架 Matrix 源碼閱讀 - TracePlugin 之 FrameTracer
- 騰訊 Apm 框架 Matrix 源碼閱讀 - 架構(gòu)解析
硬件相關(guān)
編程語言
- 探索 Java 隱藏的開銷
- Kotlin 中文文檔
- Java多態(tài)在android中的實現(xiàn)
- Cancellation and Exceptions in Coroutines
- 徹底理解引用在 Android 和 Java 中的工作原理
Linux
- 內(nèi)核探索:Regmap 框架:簡化慢速 I/O 接口優(yōu)化性能
- 嵌入式 Linux 啟動時間優(yōu)化
- Linux文件系統(tǒng)預讀的情景分析
- 使用blktrace統(tǒng)計磁盤塊I/O訪問頻率
- Linux系統(tǒng)調(diào)用(syscall)原理
- 淺墨: 聊聊Linux IO(上)
- 淺墨: 聊聊Linux IO(中)——Linux內(nèi)核中的IO棧
- 淺墨: 聊聊Linux IO(下)
- 郭?。?deadline調(diào)度器之(一):原理
- 郭?。?Deadline調(diào)度器之(二):細節(jié)和使用方法
- 郭?。?Linux內(nèi)存模型——平坦、非連續(xù)與稀疏
- linux內(nèi)核分析——CFS(完全公平調(diào)度算法)
- 從幾個問題開始理解CFS調(diào)度器
- CFS調(diào)度器(1)-基本原理
- CFS調(diào)度器(2)-源碼解析
- CFS調(diào)度器(3)-組調(diào)度
- CFS調(diào)度器(4)-PELT(per entity load tracking)
- CFS調(diào)度器(5)-帶寬控制
- CFS調(diào)度器(6)-總結(jié)
- 關(guān)于線程和I/O模型的極簡知識
- TRIM:提升磁盤性能,緩解Android卡頓
- LWN 456904: 避免磁盤回寫(writeback),抑制(throttling)緩存(page cache)寫入
- LWN 384093: 有關(guān) “回寫”(writeback)的問題討論
- LWN 211505: 避免和解決內(nèi)存碎片化
- SMP Primer for Android
- 內(nèi)存分配1 - 空閑鏈表和內(nèi)存池
- 內(nèi)存分配2 - Buddy系統(tǒng)的原理
- 內(nèi)存分配3 - Linux中Buddy系統(tǒng)的實現(xiàn)
- Linux中的內(nèi)存壓縮
- 研究Linux內(nèi)核的樂趣
- linux IO Block layer 解析
- CFS任務的負載均衡(框架篇)
- 一張圖讀懂內(nèi)存反碎片化
- 淺談新型非易失存儲
- Linux devfreq framework 剖析
- 內(nèi)存泄漏(增長)火焰圖
- Linux 系統(tǒng)性能評測基準系統(tǒng)配置及其原理
- Cgroups 與 Systemd
Flutter
- 深入 Flutter 的高性能圖形渲染
- 跨平臺技術(shù)演進及Flutter未來
- 跨平臺技術(shù)趨勢及字節(jié)跳動 Flutter 架構(gòu)實踐
- Flutter 的性能測試和理論
- 深入理解 Flutter 多線程
- 深入理解Flutter引擎啟動
- Flutter渲染機制—UI線程
- Flutter渲染機制—GPU線程
Fuchsia
技術(shù)之外的思考
- 我到底有多么努力
- 工作以來的一些感悟
- 如何自學Android?
- 技術(shù)人最重要的能力是什么?
- 淺談軟件工程師的代碼素養(yǎng)
- 陸奇:除了好代碼,工程師怎樣才算優(yōu)秀?
- 別讓自己“墻”了自己
- 100% 成功率的 offer 收割機是怎樣練成的?
- 使用簡單的邏輯方法進行獨立思考
面試題
- Android 2018 最新面試題
- 如何衡量一個Android應用開發(fā)人員的能力
- 2018Android面試總結(jié)
- Android2017-2018最新面試題(3-5年經(jīng)驗個人面試經(jīng)歷)
- Android 開發(fā)工程師面試指南
- 阿里電話面試面試題總結(jié),附答案!
- 阿里巴巴面試題
- 美團面試題
- 豌豆莢三面試題
- 蜻蜓FM面試題
- 新浪微博面試題
- 網(wǎng)易杭研面試題
- 為什么想來我們公司工作?- 面試常見問題解析
- 今日頭條大佬十年面試了 2000 人,總結(jié)了這 5 點
- 2019 年美團點評高級 Android 開發(fā)寒冬跳槽漲薪經(jīng)驗掏心分享
- 如何回答性能優(yōu)化的問題,才能打動阿里面試官?
- 2019.07 Android 面試真題集錦
- 技術(shù)面試中面試官怎么考察候選人?
- 給扔物線 HenCoder Plus 學員的一次分享文字版
- 快手,字節(jié)跳動,百度,美團Offer之旅
- 美帝面試二三事
本文其他地址
由于博客留言交流不方便,點贊或者交流,可以移步本文的知乎或者掘金頁面
知乎 - Android 性能優(yōu)化必知必會
關(guān)于我 && 博客
- 關(guān)于我 , 非常希望和大家一起交流 , 共同進步 .
- 博客內(nèi)容導航
- 優(yōu)秀博客文章記錄 - Android 性能優(yōu)化必知必會
一個人可以走的更快 , 一群人可以走的更遠
更多內(nèi)容可以進入 Android Performance 查看