首页
›
移动端与Android应用开发
›
025-网络缓存工程功能落地
›
《磁盘IO瓶颈引发ANR排查教程》
VIP20
本课程属于:025-网络缓存工程功能落地
移动端与Android应用开发 · 共 20 门相关课程,组合学习更完整。
查看所属VIP全部课程 →
← 返回所属目录
咨询 / 购买
磁盘IO瓶颈引发ANR排查教程
共计 30 章节
点击此处阅读海量试读课程:100+行业、1000+细分领域
01
ANR与磁盘IO的基础关联
主线程阻塞 · 磁盘IO超时 · 系统 watchdog 判定阈值
ANR
IO
02
现象识别
用户感知卡顿 · 系统弹窗 · logcat 中的 ANR 关键字特…
现象识别
用户感知卡顿
03
准备排查工具链
adb · systrace · strace
准备排查工具链
adb
04
采集ANR日志
adb logcat 抓取 ANR…
ANR
采集
05
采集磁盘IO统计
/proc/diskstats 与…
IO
采集磁盘
06
采集系统trace
systrace 锁定 IO 线程与…
trace
采集系统
07
定位主线程堆栈
从 traces.txt 提取卡在文… · mmap · 数据库的操作
定位主线程堆栈
traces.txt
08
判断IO瓶颈类型
顺序读 · 随机写 · fsync 频繁
IO
判断
09
区分IO来自何方
应用自身 · 第三方库 · ContentProvider
IO
区分
10
使用 strace 捕获系统调用
关注 open · read · write
strace
使用
11
分析SQLite导致IO
事务未批量 · WAL模式缺失 · 大量索引更新
SQLite
IO
12
分析SharedPreferences导致IO
主线程 commit · 大文件全量写
SharedPrefer…
IO
13
分析文件缓存未命中
Bitmap 频繁加载 · InputStream 无缓冲
分析文件缓存未命
Bitmap
14
分析外部存储IO问题
getExternalFilesDi… · SD卡速度慢
IO
分析外部存储
15
构建故障树
从ANR事件到IO瓶颈的逐层分解图
构建故障树
ANR
16
编写IO时间阈值判断规则
单次IO等待超过30ms · 累积IO超过200ms
IO
编写
17
制定修复动作总则
将主线程IO迁移到子线程 · 使用异步API · 引入缓存
制定修复动作总则
IO
18
修复SQLite
启用WAL · 批量事务 · 异步查询
SQLite
修复
19
修复SharedPreferences
使用apply替代commit · 使用MMKV或DataStore
SharedPrefer…
修复
20
修复文件读写
使用BufferedInputStr… · 预加载 · 文件缓存池
修复文件读写
BufferedInpu…
21
修复数据库索引与查询
分析explain · 避免全表扫描
修复数据库索引
查询
22
修复插件或库引入的IO
替换或配置第三方库的IO策略
IO
修复插件或库引入…
23
复测清单
覆盖常见场景 · 高并发 · 低存储状态
复测清单
覆盖常见场景
24
验证工具
使用systrace复测IO耗时 · 检查主线程占用时间
验证工具
systrace
25
线上监控方案
BlockCanary · Matrix · 自定义IOTrace
线上监控方案
BlockCanary
26
预防策略
IO线程池设计 · 存储预热 · 文件大小控制
预防策略
IO
27
文档化排查模板
统一记录现象 · 日志 · 根因
文档化排查模板
统一记录现象
28
案例一
SQLite慢查询引起ANR的完整排…
案例一
SQLite
29
案例二
SharedPreferences…
案例二
SharedPrefer…
30
综合演练
用给定日志和trace复现排查全流程
综合演练
trace
所属VIP或分类
同VIP:API接入与离线缓存策略设计实战
同VIP:LRU缓存容量控制防泄漏指南
同VIP:OkHttp动态缓存拦截器实战