外观
为什么静态变量引用 Context 会导致内存泄漏?如何正确获取 Application Context?
标准回答
静态变量持有 Activity Context,会间接保留页面和整棵 View 树。只需要应用级能力时使用 context.getApplicationContext();对话框、主题布局等确实需要 Activity 的场景,保留短期引用并随页面结束释放。
通俗例子
图片缓存单例只需要读文件,却保存 Activity Context。改用适合这种用途的 Application Context,就不必绑住具体页面。
深入解释
**为什么 Context 类型重要:**Activity Context 和页面、主题、窗口有关;Application Context 跟应用进程生命周期一致。长寿命工具只需要应用资源时,不应额外抓住某个页面。
**不能机械替换的情况:**显示依赖窗口或 Activity 主题的界面时仍需要合适的界面 Context。正确做法是缩短持有时间并明确用途,不是把所有 Context 都替换成 Application。
易混淆点
不能机械地把所有 Context 换成 Application Context。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
3.2.3