Android之Context类的功能与使用
[TOC]
文章参考:http://gityuan.com/2017/04/09/android_context/
如何获取Context
Context的源码
Context的使用
Context可能引起的内存泄漏
1)错误的单例模式
1 | public class Singleton{ |
即使 Activity 被销毁掉,但因为它的引用还存在于一个 Singleton中,就不可能被 GC掉
2)View 持有 Activity 引用
1 | public class MainActivity extends Activity{ |
有一个静态的 Drawable 对象当 ImageView 设置这个 Drawable 时,ImageView 保存了 mDrawable 的引用,而 ImageView 传入的 this 是 MainActivity 的mContext,因为被 static 修饰的 mDrawable 是常驻内存的,MainActivity 是它的间接引用,MainActivity 被销毁时,也不能被 GC 掉,所以造成内存泄漏。
总结
- 尽量使用 Application 的 Context
- 不要让生命周期长于 Activity 的对象持有其的引用
- 尽量不要在 Activity 中使用非静态内部类,因为非静态内部类会隐式持有外部类示例的引用,如果使用静态内部类,将外部实例引用作为弱引用持有。大家可以参考Handler的弱引用使用方法。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 麦溪·在路上!
评论
ValineDisqus