Android小知识-单例引起的内存泄漏

作者: 爱读书的顾先生 | 来源:发表于2018-10-06 11:38 被阅读22次

单例模式在Android开发中会经常用到,但是如果使用不当就会导致内存泄露。因为单例的静态特性使得它的生命周期同应用的生命周期一样长,如果一个对象已经没有用处了,但是单例还持有它的引用,那么在整个应用程序的生命周期它都不能正常被回收,从而导致内存泄露。


public class Singleton {
   private static Singleton singleton = null;
   private Context mContext;

   public Singleton(Context mContext) {
      this.mContext = mContext;
   }

   public static Singleton getSingleton(Context context){
    if (null == singleton){
      singleton = new Singleton(context);
    }
    return singleton;
  }
}

像上面代码中这样的单例,如果我们在调用getInstance(Context context)方法的时候传入的context参数是Activity、Service等上下文,就会导致内存泄露。

当我们退出Activity时,该Activity就没有用了,但是因为singleton作为静态单例(在应用程序的整个生命周期中存在)会继续持有这个Activity的引用,导致这个Activity对象无法被回收释放,这就造成了内存泄露。

为了避免这样单例导致内存泄露,我们可以将context参数改为全局的上下文:


public Singleton(Context mContext) {
    this.mContext = mContext.getApplicationContext();
}

全局的上下文Application Context就是应用程序的上下文,和单例的生命周期一样长,这样就避免了内存泄漏。单例模式对应应用程序的生命周期,所以我们在构造单例的时候尽量避免使用Activity的上下文,而是使用Application的上下文。

扫码_搜索联合传播样式-标准色版.png

Android、Java、Python、Go、PHP、IOS、C++、HTML等等技术文章,更有各种书籍推荐和程序员资讯,快来加入我们吧!关注技术共享笔记。

838794-506ddad529df4cd4.webp.jpg

定期推送优质文章

相关文章

  • Android小知识-单例引起的内存泄漏

    单例模式在Android开发中会经常用到,但是如果使用不当就会导致内存泄露。因为单例的静态特性使得它的生命周期同应...

  • Android 常见内存泄漏

    一、单例造成的内存泄漏Android的单例模式非常受开发者的喜爱,不过使用的不恰当的话也会造成内存泄漏。因为单例的...

  • Android 容易引起内存泄漏的小知识

    android单例模式引起的内存泄漏 当我们在使用单例模式保存缓存时,一般会把当前页面的上下文Context传入单...

  • Android内存泄漏之集合类

    Android内存泄漏基本可以分为以下四大类:1、集合类泄漏2、单例/静态变量造成的内存泄漏3、匿名内部类/非静态...

  • 何止学习Andoid内存泄漏优化

    一、Android内存泄露及优化 1、单例模式造成内存泄漏 单例的静态特性使得它的生命周期同应用的生命周期一样长,...

  • 内存泄露

    什么是内存泄漏? 引用导致的对象未被释放 引起内存泄漏的因素: 单例 非静态内部类持有外部类的隐式引用,而在外部类...

  • Android内存优化之内存泄漏

    内存泄漏 内存泄漏一般有以下几种情况:单例、静态变量、Handler、匿名内部类、资源使用未关闭 单例导致的内存泄...

  • (转载自diycode)2017 Android 面试题分享整理

    Android(安卓) Android基础知识 Android内存泄漏总结 Handler内存泄漏分析及解决 An...

  • 单例模式引起的内存泄漏

    1、单例模式引起的内存泄漏 由于单例的静态特性使得其生命周期跟应用的生命周期一样长,所以如果使用不恰当的话,很容易...

  • Android内存泄漏(三):单例

    上一节我们介绍了关于匿名内部类的内存泄漏,这一节我们来看一下单例产生内存泄漏的情况 知识点 单例的生命周期和应用(...

网友评论

    本文标题:Android小知识-单例引起的内存泄漏

    本文链接:https://www.haomeiwen.com/subject/otfhaftx.html