前言
第一部分 卡顿优化
第1章 应用优化案例 ·······················3
1.1 卡顿基本概念 ······························3
1.1.1 卡顿的定义与分类 ···············3
1.1.2 卡顿原因汇总 ·····················6
1.2 卡顿优化涉及的相关技术 ············14
1.2.1 CPU ·······························14
1.2.2 SoC平台 ·························17
1.2.3 CGroup ···························19
1.2.4 cpuset配置 ······················21
1.2.5 UFS与eMMC ··················23
1.2.6 LCD与屏幕刷新率·············24
1.3 应用耗时操作案例 ······················29
1.3.1 案例1:平台能力有限与
布局过于复杂 ···················29
1.3.2 案例2:关键路径频繁I/O
操作 ······························31
1.3.3 案例3:核心函数费时操作···35
1.3.4 案例4:关键路径频繁数据库
操作 ······························35
1.3.5 案例5:Binder风暴 ···········38
1.3.6 案例6:UI线程非绘制任务阻
塞绘制 ····························43
1.3.7 案例7:非UI线程上绘制操作
引发阻塞 ·························44
1.4 应用内存案例 ····························46
1.4.1 案例1:联系人应用内存
泄漏 ······························47
1.4.2 案例2:SystemUI进程Binder
内存泄漏 ·························48
1.4.3 案例3:system内存告警
问题 ······························51
1.4.4 案例4:应用句柄泄漏 ········56
1.4.5 案例5:adj优先级不当引发后
台应用无法被及时回收 ········59
第2章 系统优化策略与案例分析 ···63
2.1 系统优化策略 ····························63
2.1.1 自启动管控策略 ················63
2.1.2 消息推送策略 ···················64
2.1.3 关联启动管控策略 ·············65
2.1.4 系统侧进程启动管控策略 ·····66
2.1.5 内存融合技术 ···················68
2.1.6 低内存查杀 ······················72
2.2 系统侧卡顿优化案例 ··················74
2.2.1 自启动控制案例 ················74
2.2.2 关联启动控制案例 ·············76
2.2.3 线程调度优化案例 ·············80
2.2.4 应用启动卡顿案例 ·············81
2.2.5 VSync不均匀案例 ·············86
2.2.6 CPU调频优化案例 ·············89
2.2.7 I/O卡顿案例 ····················92
第二部分 稳定性优化
第3章 死机重启问题优化策略与
案例分析 ····························97
3.1 死机重启问题相关概念 ···············97
3.1.1 死机重启问题的定义 ··········97
3.1.2 死机问题跟踪与定位 ··········98
3.1.3 重启问题跟踪与定位 ·········101
3.2 死机问题案例分析 ·····················104
3.2.1 DDR位翻转案例 ··············105
3.2.2 DDR上电时序不稳定案例 ···109
3.2.3 eMMC长时间无响应导致
冻屏死机案例 ··················111
3.2.4 系统运行内存耗尽案例 ·······114
3.2.5 内存踩踏案例 ··················118
3.2.6 硬件中断风暴踩内存案例 ····123
3.2.7 其他案例 ························127
3.3 重启问题案例分析 ·····················128
3.3.1 SurfaceFlinger内存高占
案例 ·····························128
3.3.2 system_server 句柄耗尽
案例 ·····························131
3.3.3 PID重复使用案例 ·············132
3.3.4 预置应用共享系统进程UID
案例 ·····························134
3.3.5 system_server线程泄漏
案例 ·····························137
3.3.6 内核代码浮点运算内存踩踏
案例 ·····························139
第4章 黑屏问题优化策略与案例
分析 ··································143
4.1 黑屏问题定义和可能的原因 ·······143
4.2 黑屏案例 ··································144
4.2.1 开机流程异常案例 ············144
4.2.2 界面切换黑屏案例 ············147
4.2.3 抖音卡顿黑屏案例 ············150
4.2.4 应用逻辑异常导致黑屏
案例 ·····························152
4.2.5 锁屏黑屏案例 ··················153
第三部分 续航优化
第5章 外设功耗优化策略与案例
分析 ··································157
5.1 功耗基础 ··································157
5.1.1 基础电流分类 ··················158
5.1.2 系统软件与功耗的关系 ·······158
5.1.3 国家3C发热标准解读 ·······160
5.2 外设功耗问题优化策略 ··············161
5.3 外设功耗优化案例 ·····················162
5.3.1 底电流优化案例 ···············162
5.3.2 LCD电流优化案例············167
5.3.3 TP引脚配置优化案例 ········172
5.3.4 音频参数优化案例 ············172
5.3.5 海运模式电流优化案例 ·······174
第6章 系统优化策略与案例分析 ····176
6.1 续航问题的定义与分类 ··············176
6.2 续航优化涉及的相关技术 ···········177
6.2.1 CPU调度机制 ·················178
6.2.2 Alarm和JobScheduler
机制 ······························181
6.2.3 Doze模式 ·······················183
6.2.4 App Standby机制 ·············186
6.2.5 Bucket机制 ····················188
6.3 系统级优化方案 ························189
6.3.1 温控方案优化案例 ············190
6.3.2 媒体扫描优化案例 ············197
6.3.3 GMS应用功耗优化案例 ·····200
6.3.4 5G网络参数优化案例 ········201
6.4 应用异常优化案例 ·····················204
6.4.1 后台应用CPU高占优化
案例 ·····························204
6.4.2 后台应用频繁唤醒优化
案例 ·····························207
6.4.3 后台应用频繁联网优化
案例 ·····························209
6.4.4 后台应用蓝牙扫描优化
案例 ·····························212
6.4.5 后台应用频繁定位优化
案例 ·····························214
6.4.6 应用异常持有亮屏锁优化
案例 ·····························219
后 记 ············································220