课程概述与前置知识
做Android开发这些年,我踩过最多的坑就是网络请求和蓝牙回调混在一起泄漏的场景。你知道吗?OkHttp的请求还没结束,Activity却已经销毁了;GATT回调还在跑,Service却早已断连——两个看似独立的模块,因为生命周期没对齐,硬生生把App拖垮了。
这个课程就是冲着这个痛点来的。我把它拆成30章,每章讲一个实战场景,带你从根上理解混合泄漏为什么发生、怎么稳定复现、以及用什么手段彻底防住。
课程目标
学完这个系列,你至少能搞定三件事:
- 识别:一眼看出代码里可能产生泄漏的OkHttp请求和GATT回调
- 复现:借助LeakCanary + 自定义Handler,稳定再现混合泄漏
- 修复:用生命周期感知组件、弱引用池、协程取消链等手段,从设计上杜绝泄漏
说白了,你不是在学理论,而是在练一套「侦察-定位-排除」的实战闭环。
适合人群
如果你是这类开发者,这套课程就是为你准备的:
- 有1年以上Android开发经验,已经写过网络请求和蓝牙交互
- 遇到过“莫名其妙的内存增长、页面退出后还在打印日志”
- 想系统掌握内存泄漏分析,不再靠随机试错
前置技能要求
技术上不做特别高的门槛,但我假设你已经熟悉这些基础:
| 领域 | 具体要求 | 我为什么这么要求 |
|---|---|---|
| Android基础 | Activity/Fragment生命周期、Service绑定方式、Handler机制 | 泄漏的本质是生命周期错位,不懂生命周期就看不懂泄漏 |
| 网络编程 | HTTP协议基本概念、OkHttp的基本用法(同步/异步请求、拦截器) | 我遇到过一个人连enqueue和execute的区别都说不清,排查泄漏时特别吃力 |
| 蓝牙基础 | BLE GATT的基本流程(扫描、连接、发现服务、读写、通知) | 不需要精通,但得明白onConnectionStateChange回调什么时候触发 |
| 工具使用 | Android Studio Profiler / Memory Profiler 基本操作 | 如果你还不会抓hprof文件,建议先花半小时熟悉一下 |
注意:我不打算手把手教OkHttp怎么发起一个GET请求。那些官方文档上都有。我默认你已经能写出能跑的发起网络请求的代码——至于它会不会泄漏,那是我们一起解决的问题。
这个系列要讲什么?
我把30章的内容当成一条生产线来看。先看个整体结构:
我的建议:初看这个图可能觉得范围挺大。别怕,我们按顺序来。先打好前3章的工具基础,后面每个场景都配了可运行的Demo和dump出的hprof文件截图。你跟着复制代码、运行、截图对答案就行。
学这个课程能带走什么?
我经常在团队里说一句话:「不能防泄漏的架构设计,都是玩火」。这个课程结束时,你会带走:
- 一套混合场景泄漏检测CheckList,每次Review代码时直接照着核对。
- 一个基于Lifecycle的通用回调管理组件,OkHttp和GATT都能往里套。
- 多个真实项目中的修复方案,包括我当年在公司线上环境怎么打的补丁。
好了,第一张图的路线我们已经铺开了。下一个章我们会正式搭建实践环境,把LeakCanary、Perfetto这些工具配好。嗯,到时候我还会分享一个我踩过的坑——千万不要在Release包上开LeakCanary,线上用户手机会卡到你怀疑人生。
准备好动手了吗?咱第二章见。