騰訊音樂(lè )Android開(kāi)發(fā)總監撰寫(xiě),從事移動(dòng)開(kāi)發(fā)10余年,曾主導并參于過(guò)多款用戶(hù)規模上億的Android應用的開(kāi)發(fā)工作
以流暢、穩定、省電、省流量4個(gè)方向為目標,從UI、內存、存儲、穩定性、省電、安裝包大小6個(gè)維度深入剖析性能優(yōu)化的技術(shù)和方案
本書(shū)旨在用騰訊的億級用戶(hù)App的開(kāi)發(fā)經(jīng)驗幫助你打造高質(zhì)量的Android 應用。
從WinCE時(shí)代開(kāi)始,作者從事移動(dòng)應用開(kāi)發(fā)10余年,現擔任騰訊音樂(lè )Android平臺的開(kāi)發(fā)總監,主導并參于過(guò)多個(gè)用戶(hù)規模上億的Android應用開(kāi)發(fā)工作,對Android應用開(kāi)發(fā)有深刻的認識,特別在架構設計、性能優(yōu)化等方面有豐富的實(shí)戰經(jīng)驗。
本書(shū)從用戶(hù)體驗的角度,將性能問(wèn)題總結為4類(lèi):
(1)快:流暢的操作體驗
(2)穩:穩定
(3)?。菏‰?、省流量
(4)?。喊惭b包要盡可能小
導致出現這4類(lèi)問(wèn)題的原因可能是卡頓、內存使用不合理、代碼質(zhì)量差、代碼邏輯不優(yōu)秀、安裝包過(guò)大等。本書(shū)從繪制(UI)、內存、存儲、穩定性、耗電以及安裝包6個(gè)方面深入講解了性能優(yōu)化具體涉及的技術(shù)以及優(yōu)化方案,同時(shí)講解了多種性能優(yōu)化工具的使用。此外,還提供了典型的案例,幫助讀者理解Android的運行機制和原理,掌握Android性能優(yōu)化的思路和有效方法。
羅彧成,騰訊音樂(lè )Android開(kāi)發(fā)總監,從事移動(dòng)應用開(kāi)發(fā)工作10余年,在A(yíng)ndroid、Linux、WinCE等平臺上有豐富的開(kāi)發(fā)經(jīng)驗。
對Android應用開(kāi)發(fā)有深刻的認識,特別在架構設計、性能優(yōu)化等方面有豐富的實(shí)戰經(jīng)驗,主導并參于過(guò)多個(gè)用戶(hù)規模上億的Android應用開(kāi)發(fā)工作。同時(shí)在車(chē)載網(wǎng)絡(luò )、家庭網(wǎng)絡(luò )協(xié)議方面也有豐富的開(kāi)發(fā)經(jīng)驗。
曾在多個(gè)有影響力技術(shù)峰會(huì )發(fā)表過(guò)主題演講。
前 言
第1章 Android Studio使用指南 1
1.1 Android Studio的優(yōu)勢 1
1.2 Android Studio使用入門(mén) 2
1.2.1 Android Studio安裝 2
1.2.2 創(chuàng )建一個(gè)Android Studio工程 3
1.2.3 從Eclipse項目遷移到Android Studio 5
1.3 Android Studio實(shí)用技巧 7
1.3.1 代碼管理 7
1.3.2 代碼編輯技巧 8
1.3.3 調試技巧 10
1.4 本章小結 11
第2章 繪制優(yōu)化 12
2.1 Android系統顯示原理 13
2.1.1 繪制原理 13
2.1.2 刷新機制 16
2.1.3 卡頓的根本原因 20
2.2 性能分析工具 21
2.2.1 卡頓檢測工具 22
2.2.2 TraceView 23
2.2.3 Systrace UI性能分析 26
2.3 布局優(yōu)化 29
2.3.1 常用布局優(yōu)化工具 30
2.3.2 布局優(yōu)化方法 34
2.4 避免過(guò)度繪制 43
2.4.1 過(guò)度繪制檢測工具 44
2.4.2 如何避免過(guò)度繪制 44
2.4.3 案例:無(wú)過(guò)度繪制View的實(shí)現 45
2.5 啟動(dòng)優(yōu)化 49
2.5.1 應用啟動(dòng)流程 49
2.5.2 啟動(dòng)耗時(shí)監測 52
2.5.3 啟動(dòng)優(yōu)化方案 56
2.6 合理的刷新機制 58
2.6.1 減少刷新次數 58
2.6.2 避免后臺線(xiàn)程影響 59
2.6.3 縮小刷新區域 59
2.7 提升動(dòng)畫(huà)性能 60
2.7.1 幀動(dòng)畫(huà) 60
2.7.2 補間動(dòng)畫(huà) 60
2.7.3 屬性動(dòng)畫(huà) 62
2.7.4 硬件加速 63
2.8 卡頓監控方案與實(shí)現 66
2.8.1 監控原理 67
2.8.2 代碼實(shí)現 68
2.9 本章小結 79
第3章 內存優(yōu)化 80
3.1 Android內存管理機制 81
3.1.1 Java對象生命周期 81
3.1.2 內存分配 82
3.1.3 內存回收機制 84
3.1.4 GC類(lèi)型 86
3.2 優(yōu)化內存的意義 87
3.3 內存分析工具 90
3.3.1 Memory Monitor 90
3.3.2 Heap Viewer 91
3.3.3 Allocation Tracker 94
3.4 避免內存泄漏 96
3.4.1 內存泄漏定義 97
3.4.2 使用MAT查找內存泄漏 97
3.4.3 常見(jiàn)內存泄漏場(chǎng)景 103
3.4.4 內存泄漏監控 106
3.5 優(yōu)化內存空間 109
3.5.1 對象引用 109
3.5.2 減少不必要的內存開(kāi)銷(xiāo) 110
3.5.3 使用最優(yōu)的數據類(lèi)型 112
3.5.4 圖片內存優(yōu)化 117
3.6 圖片管理模塊設計與實(shí)現 120
3.6.1 實(shí)現異步加載功能 121
3.6.2 實(shí)現三重緩存 130
3.6.3 開(kāi)源圖片組件 140
3.7 本章小結 142
第4章 存儲優(yōu)化 144
4.1 存儲方式 144
4.1.1 SharedPreferences 145
4.1.2 文件存儲 145
4.1.3 SQLite(需要擴展) 146
4.1.4 ContentProvider 147
4.2 序列化 147
4.2.1 Serializable與Parcelable 148
4.2.2 Gson實(shí)現JSON的序列化和反序列化 148
4.2.3 Nano Proto Buffers 149
4.2.4 FlatBuffers 149
4.2.5 小結 150
4.3 SharedPreferences優(yōu)化 150
4.4 數據庫使用及優(yōu)化 151
4.4.1 數據庫實(shí)現 152
4.4.2 數據庫優(yōu)化 157
4.5 本章小結 161
第5章 穩定性?xún)?yōu)化 162
5.1 提高代碼質(zhì)量 162
5.1.1 代碼審查 163
5.1.2 代碼靜態(tài)掃描工具 166
5.2 Crash監控 168
5.2.1 Java層Crash監控 168
5.2.2 Native層Crash監控 171
5.2.3 Crash上報機制 173
5.3 ANR剖析 173
5.3.1 ANR介紹 173
5.3.2 ANR分析 174
5.3.3 ANR監控 176
5.4 提高后臺進(jìn)程存活率 178
5.4.1 應用進(jìn)程優(yōu)先級 178
5.4.2 利用SyncAdapter提高進(jìn)程優(yōu)先級 180
5.5 本章小結 183
第6章 耗電優(yōu)化 184
6.1 耗電檢測工具 184
6.2 三大模塊省電優(yōu)化 187
6.2.1 顯示 187
6.2.2 網(wǎng)絡(luò ) 188
6.2.3 CPU 189
6.3 應用常用優(yōu)化方案 191
6.3.1 計算優(yōu)化 191
6.3.2 避免WakeLock使用不當 192
6.3.3 使用Job Scheduler 193
6.4 Doze模式 197
6.4.1 Doze模式介紹 197
6.4.2 Doze模式應用策略 198
6.4.3 測試Doze模式應用工作狀態(tài) 199
6.5 本章小結 199
第7章 安裝包大小優(yōu)化 200
7.1 應用裝包的構成 200
7.2 減少安裝包大小的常用方案 203
7.2.1 代碼混淆 203
7.2.2 資源優(yōu)化 204
7.2.3 其他優(yōu)化 206
7.3 本章小結 207
結束語(yǔ) 208