About the Activity memory leak

在我们日常开发当中一不小心就会写上一丢丢内存泄露的代码。
例如下面这一段单例模式:

public Myactivity extends Activity{
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {    
              setContentView(R.layout.activity_main);    
              super.onCreate(savedInstanceState);
              Singleton. getInstance(getContext())
    }
}

public Singleton{
    private  static Singleton INSTATIC  = new Singleton();
    
    public static Singleton getInstance(Context context) {  
        if (INSTATIC == null) {  
            INSTATIC = new Singleton(context);  
          }  
            return instance;  
     }  
}

以上的代码中当Activity 生命周期结束时,Singleton类里面却还存在Activity的引用 这样Activity占用的内存就一直不能回收,于是就内存泄露啦。
当然啦内存泄露的例子还是很多的这里就不一一列举。

想要避免Activity相关的内存泄露,记住以下几点:

  1. 不要让生命周期长的对象引用Activity.getContext,即保证引用Activity的对象要与Activity本身生命周期是一样的
  2. 对于生命周期长的对象,可以使用getApplicationContext()
  3. 避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部对象引用导致的生命周期变化。
    原文作者:qingwenLi
    原文地址: https://www.jianshu.com/p/1fcbbbf29410
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞