课程概述与前置知识

做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章的内容当成一条生产线来看。先看个整体结构:

《OkHttp请求与GATT回调泄漏混合场景》知识体系 基础知识与工具预备(第1-3章) OkHttp 泄漏场景 GATT 回调泄漏场景 混合场景实战 Call对象未取消 · 异步回调持有 Dispatcher队列泄漏 拦截器中Handler泄漏 未注销GattCallback Service绑定后未解绑 部分写队列积压 同一页面同时使用OkHttp和BLE 协程+回调混合泄漏 Lifecycle框架的正确使用 最终目标:建立一套可复用的混合场景泄漏检测 & 防御体系 覆盖从复现 → 分析 → 修复 → 自动化测试的完整流程

我的建议:初看这个图可能觉得范围挺大。别怕,我们按顺序来。先打好前3章的工具基础,后面每个场景都配了可运行的Demo和dump出的hprof文件截图。你跟着复制代码、运行、截图对答案就行。

学这个课程能带走什么?

我经常在团队里说一句话:「不能防泄漏的架构设计,都是玩火」。这个课程结束时,你会带走:

  1. 一套混合场景泄漏检测CheckList,每次Review代码时直接照着核对。
  2. 一个基于Lifecycle的通用回调管理组件,OkHttp和GATT都能往里套。
  3. 多个真实项目中的修复方案,包括我当年在公司线上环境怎么打的补丁。

好了,第一张图的路线我们已经铺开了。下一个章我们会正式搭建实践环境,把LeakCanary、Perfetto这些工具配好。嗯,到时候我还会分享一个我踩过的坑——千万不要在Release包上开LeakCanary,线上用户手机会卡到你怀疑人生。

准备好动手了吗?咱第二章见。