外观
Context 为什么容易引发内存泄漏?
标准回答
Activity Context 与页面生命周期关联。单例或长期任务持有它,可能让页面及整棵 View 树在退出后仍然可达。长生命周期对象在适用时使用 Application Context,确实需要窗口和主题的 UI 操作则使用对应页面 Context。
机制解释
不是把所有 Context 都替换成 Application 就结束了。Dialog、主题相关布局和窗口操作具有自己的要求;SDK 应区分纯业务能力和 UI 能力,避免为通信保存整个 Activity。
延伸追问
WeakReference 能彻底修复吗?不能。它不能替代取消任务、移除监听、关闭连接等资源管理;对象随时可能消失,也会让代码更复杂。
内容来源
- Android 智能硬件 SDK 技术 Wiki · 原条目
Q08