美文网首页
关于Context造成的内存泄漏

关于Context造成的内存泄漏

作者: crush_d872 | 来源:发表于2020-10-13 18:50 被阅读0次

在项目过程中,我们存在很多工具类,这些工具类不限于网络请求及一些工具方法,这些工具方法大多数是需要访问资源的,这时就需要Context的参与

在这种情况下,就需要注意Context的引用问题,

1.单例引起的内存泄漏

public class PreDownloadHelper {
   private static PreDownloadHelper mInstance;
   private Context mContext;
   private PreDownloadHelper(final Context context) {          
  //直接引用会造成OOM,单例得生命周期与应用的周期一致
    //使用弱引用 或getApplicationContext
    this.mContext = context;
  }
    public static PreDownloadHelper getInstance(Context context) {
    if(mInstance == null) {
        synchronized (PreDownloadHelper.class) {
            if(mInstance == null) {
                mInstance = new PreDownloadHelper(context);
            }
        }
    }
    return mInstance;
}
}

2.较为隐晦的方式
即在一个类中 声明了一个View如下

private View infoLayout;

而在代码中又进行这样的操作

this.infoLayout = view;

而你这个类又使用了单例,
我们都知道 使用单例必须要把类声明为静态变量:即

public static volatile UserVideoInfoUtil mInstance;

这种情况下 依然会造成内存泄漏

这么写是没有问题的,问题在于,这个Context哪来的我们不能确定,很大的可能性,你在某个Activity里面为了方便,直接传了个this;这样问题就来了,我们的这个类中的sInstance是一个static且强引用的,在其内部引用了一个Activity作为Context,也就是说,我们的这个Activity只要我们的项目活着,就没有办法进行内存回收。而我们的Activity的生命周期肯定没这么长,所以造成了内存泄漏。

我们可以使用软引用,但是如果被回收,就会造成空指针

如果使用context.getApplicationContext()

可以解决问题,但是Activity和Application 的Context应用场景是不一样的


image.png

3.Toast引起的内存泄漏
可参考本文

https://blog.csdn.net/Deaht_Huimie/article/details/104434510

相关文章

  • 关于Context造成的内存泄漏

    在项目过程中,我们存在很多工具类,这些工具类不限于网络请求及一些工具方法,这些工具方法大多数是需要访问资源的,这时...

  • 内存泄漏的例子

    内存泄漏的例子 1. 单例造成的内存泄漏 由于需要传入一个Context,所以这个Context的生命周期的长短至...

  • Android Context造成的内存泄露

    Context造成的内存泄漏,基本都是由于Context销毁的时候,却被引用导致销毁失败,而Application...

  • Android-稳定性问题

    正确使用Context 一般Context造成的内存泄漏,几乎都是当Context销毁的时候,却因为被引用导致销毁...

  • 正确使用context

    正确使用Context一般Context造成的内存泄漏,几乎都是当Context销毁的时候,却因为被引用导致销毁失...

  • Android内存泄漏优化

    目录介绍: 01.什么是内存泄漏 02.内存泄漏造成什么影响 03.内存泄漏检测的工具有哪些 04.关于Leakc...

  • Android性能-内存泄漏

    泄漏原因: 单例造成的内存泄漏 非静态内部类(匿名类等)创建静态实例造成的内存泄漏 Handler/Thread/...

  • 关于AFNetworking内存泄漏的解决方案

    前言 相信不少喜欢对内存进行优化的开发者都注意到了,使用AFNetworking会造成内存泄漏,当然造成内存泄漏的...

  • Android 优化一: Leakcanary检测内存泄漏汇总

    Leakcanary检测内存泄漏汇总目录介绍:1.什么是内存泄漏2.内存泄漏造成什么影响3.内存泄漏检测的工具有哪...

  • 一些笔试题

    java内存相关 内存泄漏 在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并...

网友评论

      本文标题:关于Context造成的内存泄漏

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