首页 > 技术文章 > 内存泄露解决

baizhou168 2021-01-17 03:25 原文

1.内存泄露介绍

  定义:内存中存在已经没有用的对象

  表现:内存抖动、可用内存逐渐变少 

  危害:内存不足、GC频繁、OOM

1.1 Memory Analyzer(mat工具)

  https://www.eclipse.org/mat/downloads.php

  转换:hprof-conv原文件路径--- 转换后文件路径

 

2.内存泄露解决实战

  public interface CallBack{

    void dpOperate();

  }

  public class CallbackManager{

    public static ArrayList<CallBack> sCallBacks = new ArrayList<>();

    public static void addCallBack(CallBack callBack){

      sCallBacks.add(callBack);

    }

    public static void removeCallBack(CallBack callBack){

      sCallBacks.remove(callBack);

    }

  }

 

  public class MemeryLeakActivity extends AppCompatActivity implements CallBack{

    @override

    protected void onCreate(@Nullable Bundle savedInstanceState){

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_memoryleak);

      ImageView imageView = findViewById(R.id.iv_memoryleak);

      Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawble.test);

      imagView.setImageBitmap(bitmap);

      CallBackManager.addCallBack(this);

    }

    

    @Override

    protected void onDestroy(){

      super.onDestroy();

      CallBackManager.removeCallBack(this);//通过调用这个方法来解决内存泄露问题

    }

    @Override

    public void dpOperate(){ 

    }

  }

 

  运行后,打开profiler,下载heap信息

  在终端输入命令:

 

 

 

3.总结

  使用Memory Profiler初步观察

  通过Memory Analyzer结合代码确认

 

推荐阅读